博客
关于我
JavaScript按值传递与按共享传递
阅读量:331 次
发布时间:2019-03-04

本文共 959 字,大约阅读时间需要 3 分钟。

在开始JavaScript按值传递与按共享传递的探讨之前,我们先要知道JavaScript的五种基本数据类型、按值传递与按引用传递的概念。
- JavaScript的5种基本数据类型分别是:Undefined、Null、Boolean、Number、String
- 按值传递:函数的形参是被调用时所传实参的副本,修改形并不会影响实参。
- 按引用传递:函数的形参接收实参的内存地址,而不再是副本。这意味着函数形参的值如果被修改,实参也会被修改。这里可以给大家预告一下,虽然说JavaScript没有按引用传递的说法,但后面将要提到的“按共享传递”中会用到“按引用传递”的概念。
在JavaScript中,基本数据类型按值传递,比如

var a=100;function foo(x){    x=1;}foo(a);console.log(a)

最后输出的结果为100,变量a并没有被修改为1
而JavaScript中对象的传递与基本类型不同,它是按共享传递的。我对按共享传递的理解是——按共享传递时,我们应该把形参看做由两部分组成,一部分是形参本身、一部分是形参属性所指向的地址。形参本身是按值传递的,但形参属性所指向的地址却和实参属性地址一样,可以看作按引用传递。
如何理解上面这堆不知所云的概念呢? 我们来看个栗子

var a={    x:1,    y:2}function foo(obj){       obj={        x:3,        y:4    }}foo(a)console.log(a)

最后输出的结果a仍然是{x:1,y:2}。这是因为形参本身是按值传递的,修改形参本身不会造成实参的修改,如果我们把上面的代码改成如下这样子

var a={    x:1,    y:2}function foo(obj){    obj.x=3;    obj.y=4;}foo(a)console.log(a)

最后就会很神奇的发现a被修改为了{x:3,y:4},这是因为形参属性所指向的地址与实参所指向的地址一样,修改的形参的属性就同时修改了实参的属性。
所以,大家就只需要记住五种基本类型按值传递,对于对象而言,直接修改形参对实参没有效果,而修改形参的属性却可以同时修改实参的属性。

转载地址:http://xdde.baihongyu.com/

你可能感兴趣的文章
centos7 elasticsearch5.2.2安装kibana5.2.2
查看>>
第四课:ES6的内置对象扩展(Set 数据结构:不重复数据)(2021/4/22)
查看>>
一、预编译(2021/4/23)
查看>>
四、js的深浅拷贝(2021/4/24)
查看>>
十四、数组扁平化处理(2021/4/27)
查看>>
数据挖掘于分析实例解析——数据特征分析
查看>>
记录一次需求变动导致的重构
查看>>
使用async、await改善异步代码
查看>>
BugkuCTF web_1-10
查看>>
零基础入门JavaScript 这一篇笔记就够了
查看>>
MySQL_安全管理、表单传值、php操作
查看>>
POJ 3468 A Simple Problem with Integers(线段树+区间更新)
查看>>
BUUCTF web WarmUp
查看>>
python数据分析
查看>>
在所有情况下取到顶层对象
查看>>
解构赋值
查看>>
封装vue的弹窗组件
查看>>
B1021 个位数统计 (15 分)
查看>>
java中的字符串
查看>>
Idiot 的间谍网络
查看>>