所以我有这段代码,我尝试通过将对象作为函数的引用传递来改变对象:
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);
然后我的邪恶双胞胎代码看起来相同但行为不同:
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);
最佳答案
此代码 obj = { Why: 'newer' };
不会发生变化,它只是分配给函数内的局部变量 obj
。
要改变对象,您需要使用属性分配。
换句话说,obj
指向某个对象(包含对该对象的引用),因此您可以更改它。通过将值重新分配给其他对象,您将对原始对象的引用替换为对新对象的引用。
关于javascript - 通过引用函数传递对象,意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815540/