【问题标题】:Javascript: Object arguments by reference, understanding assignment discrepancyJavascript:通过引用的对象参数,理解分配差异
【发布时间】:2010-12-16 16:29:13
【问题描述】:

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

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

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

【问题讨论】:

标签: javascript object pass-by-reference


【解决方案1】:

这个问题已经被问过(见我的评论),但在这个意义上,“参考”与 C++ 参考不同,后者不可重新分配。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2014-02-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多