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

标签 javascript function pass-by-reference javascript-objects

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

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/

相关文章:

PHP 架构以及按引用传递与按值传递

javascript - 如何使用 Kinvey Business Logic 从集合中删除旧对象?

javascript - 如何从表的列(而不是标题)获取行的单元格值?

function - 如何在 Scala 中编写限制函数?

python - 将生成器附加到循环中的堆栈,生成器指向最终循环变量

php - 使用 Memcached 的 set 方法时看似不可能的 PHP 变量引用行为

javascript - 读取文件并将其存储在javascript中的数组中

javascript - ComboBox.store.loadData 无法加载单项数组

python - Matplotlib:从要插入新子图中的函数返回 AXes

javascript - 重新排列 div 后,JQuery 事件不再响应