【发布时间】: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