gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:36:56 24 4
gpt4 key购买 nike

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

好吧,假设我有两个名为 onload 的 JavaScript 程序,两个版本之间有一个小的变化...

第一个程序的修改函数这样分配参数:data.fruit = "芒果";

//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();

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

最佳答案

之前有人问过这个问题(请参阅我的评论),但这个意义上的“引用”与 C++ 引用不同,后者不可重新分配。

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

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

关于Javascript:通过引用对象参数,理解赋值差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com