引用传递和值传递的理解有问题吗?

来源: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就没有关系了。

同学可以再理解一下。

如果帮助到了你,欢迎采纳~祝学习愉快~

1
hHXL
h js里的参数传递不都是按值传递的吗?
h019-08-22
共1条回复

好帮手慕言

2019-08-23

同学你好,同学理解的是正确的,棒棒哒,

如果帮助到了你,欢迎采纳~祝学习愉快~

0

好帮手慕言

2019-08-23

同学你好,可以传递基本类型(比如Number,基本类型传递的是值),也可以传递引用类型。

传值的例子:

http://img.mukewang.com/climg/5d5f46770001cc3404530218.jpg

效果:

http://img.mukewang.com/climg/5d5f46850001202d04200149.jpg

传递引用类型的例子:

http://img.mukewang.com/climg/5d5f46e40001c47f05340306.jpg

效果:

http://img.mukewang.com/climg/5d5f46ef00010eec02810147.jpg

同学可以根据自己的需求来判断使用哪种。效果都是一样的。

如果没能解决你的疑问,可以创建一个新的问题继续提问。

如果帮助到了你,欢迎采纳~祝学习愉快~

0
hHXL
h 我是想说实参和形参之间的参数传递都是按值传递来着,不是想说实参的类型是基本类型还是引用类型
h019-08-23
共1条回复

0 学习 · 4826 问题

查看课程

相似问题