我试图将对象作为函数参数(作为引用传递而不是值),并注意到对我来说似乎很奇怪,我想知道为什么这样做。
好吧,假设我有两个名为onload的JavaScript程序,版本之间只有一个小的改动......
第一个程序的修改函数分配参数:
data.fruit = "Mango";
//This program *will* update the data.fruit in the scope of main() with "Mango".
function modify(data) {
data.fruit = "Mango";
alert(data.fruit+"\nmodify();");
}
function main(){
var data= {"fruit":"Apple"};
modify(data);
alert(data.fruit+"\nmain();");
}
main();
第二个程序的修改函数重新赋值参数对象的值如下:
data = {"fruit" : "Mango"};
//This program *ignores* updating the object in the scope of main.
function modify(data) {
data = {"fruit" : "Mango"};
alert(data.fruit+"\nmodify();");
}
function main(){
var data= {"fruit":"Apple"};
modify(data);
alert(data.fruit+"\nmain();");
}
main();
也许我误解了传递引用,但是如果我正在分配对象的值,在我看来,分配对象时新对象的值应该保持引用。有人可以向我解释这种行为吗?为什么在分配这种方式时参考会丢失?
答案 0 :(得分:3)
之前已经问过这个问题(参见我的评论),但是"参考"从这个意义上讲,它与C ++引用不同,后者不能重新分配。
为变量* re *分配一个新值引用该变量,而不是更改先前引用的对象。
另一方面,在上执行操作确实会影响引用的对象。它只是重新分配变量的赋值运算符(及其变体+=
等)