Javascript:通过引用对象参数,理解赋值差异

时间:2010-12-16 16:29:14

标签: javascript object pass-by-reference

我试图将对象作为函数参数(作为引用传递而不是值),并注意到对我来说似乎很奇怪,我想知道为什么这样做。

好吧,假设我有两个名为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();

也许我误解了传递引用,但是如果我正在分配对象的值,在我看来,分配对象时新对象的值应该保持引用。有人可以向我解释这种行为吗?为什么在分配这种方式时参考会丢失?

1 个答案:

答案 0 :(得分:3)

之前已经问过这个问题(参见我的评论),但是"参考"从这个意义上讲,它与C ++引用不同,后者不能重新分配。

为变量* re *分配一个新值引用该变量,而不是更改先前引用的对象。

另一方面,在上执行操作确实会影响引用的对象。它只是重新分配变量的赋值运算符(及其变体+=等)