我正在尝试理解“争论传递”的想法。在我正在读的一本书中,它指出参数仅按值传递,而不是按引用传递。
function addTen(num) {
num + = 10;
return num;
}
var count = 20;
var result = addTen(count);
alert(count); // 20 - no change
alert(result); // 30
上面的例子很清楚,但下面的例子让我很困惑。
当 person 传递给 setName 函数时,它不是镜像局部变量 'obj'
并向下传递函数中的语句?
即,首先将 person 设置为属性名称,然后将其分配给一个新对象,最后为这个新创建的 person 对象分配属性“Gregg”???
为什么你会得到“尼古拉斯”!!!
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //" Nicholas"
对象被传递给函数作为参考文献的副本。现在,您的示例中接下来会发生什么:
var person = new Object();
function setName(obj) { // a local obj* is created, it contains a copy of the reference to the original person object
obj.name = "Nicholas"; // creates a new property to the original obj, since obj here has a reference to the original obj
obj = new Object(); // assigns a new object to the local obj, obj is not referring to the original obj anymore
obj.name = "Greg"; // creates a new property to the local obj
}
setName(person);
alert( person.name); //" Nicholas"
*
= obj
is a 局部变数含有一个value,这是对原始的引用obj
。当您稍后更改value of the 局部变数,它没有反映到原始对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)