引用传递和值传递的理解有问题吗?
来源:3-5 变量比较和值的复制
PHXL
2019-08-22 15:33:01
引用传递是将一段内存单元的地址赋给另一个变量,所以并没有新开辟一段内存空间,两个变量指向的是同一个内存单元;值传递需要将一个内存单元的值复制给另一个内存单元,所以改变其中一个内存单元的内容不会影响到另一个内存单元内容。
var person=new Object();
function setName(obj){
obj.name="xiaoming";
obj=new Object();
obj.name="xiaohua";}
setName(person);
这段代码是这样理解的吗?变量person中存着指向对象的地址,调用setName函数是将person中的数据复制给了一个临时变量obj,使得obj能够访问到同一个对象,所以修改obj.name就相当于修改了person.name,后来obj里的地址指向了另一个内存单元,并重新设置该内存单元对象属性,但是person中的数据并没有改变,还是指向原来的内存单元,所以这是值传递。
3回答
好帮手慕言
2019-08-22
同学你好,前面理解的都是正确的。最后一句值传递同学是想说obj与person之间的关系吗?如果是的话obj与person之间是引用传递,给obj添加了一个name属性,值为xiaoming,person.name也就添加了一个name属性,值为xiaoming。随后obj又指向了另一个地址,在新地址里添加了一个name属性,值为xiaohua。obj与person之间是引用传递,所以obj改变地址之后和person就没有关系了。
同学可以再理解一下。
如果帮助到了你,欢迎采纳~祝学习愉快~
好帮手慕言
2019-08-23
同学你好,同学理解的是正确的,棒棒哒,
如果帮助到了你,欢迎采纳~祝学习愉快~
好帮手慕言
2019-08-23
同学你好,可以传递基本类型(比如Number,基本类型传递的是值),也可以传递引用类型。
传值的例子:
效果:
传递引用类型的例子:
效果:
同学可以根据自己的需求来判断使用哪种。效果都是一样的。
如果没能解决你的疑问,可以创建一个新的问题继续提问。
如果帮助到了你,欢迎采纳~祝学习愉快~
相似问题