gpt4 book ai didi

javascript - 通过引用函数传递对象,意外行为

转载 作者:行者123 更新时间:2023-11-29 18:54:55 28 4
gpt4 key购买 nike

所以我有这段代码,我尝试通过将对象作为对函数的引用来传递它来改变对象:

var c = { why: 'older' };
var d;
d = c;
//passing by reference
function changeGreeting(obj) {
obj.why = 'newer' ; // mutate
}
changeGreeting(d)
console.log(c);
console.log(d);

这会成功变异并按预期输出: enter image description here到目前为止没有问题..

然后我有邪恶的双胞胎代码看起来一样但行为不同:

var c = { why: 'older' };
var d;
d = c;
//passing by reference, i wish..
function changeGreeting(obj) {
obj = { why: 'newer' }; // trying to mutate..
}
changeGreeting(d)
console.log(c);
console.log(d);

我希望它能以同样的方式工作,但它没有(它无法改变)。 enter image description here正在寻找原因的明确解释?

最佳答案

此代码 obj = { why: 'newer' }; 不会发生变化,它只是分配给函数内的局部变量 obj

要改变对象,您需要使用属性赋值。

换句话说,obj 指向某个对象(包含对该对象的引用),因此您可以改变它。通过将值重新分配给其他对象,您正在将对原始对象的引用替换为对新对象的引用。

关于javascript - 通过引用函数传递对象,意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815540/

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