我对JavaScript处理作为函数参数传递的对象的方式感到有点困惑。
例如,在以下代码中:
var a = {
val: "old"
};
var b = {
val: "old"
};
function update(a, b) {
a.val = "new";
b = {
val: "new"
};
}
update(a, b);
console.log(a, b);
输出如下:
val
的{{1}}属性已更改,但a
的属性未更改。我在某处读到了对象通过引用传递给函数。任何人都可以解释这种行为。
提前致谢。
答案 0 :(得分:0)
在a
情况下,您正在更改变量a
指向的对象。在b
情况下,您正在创建一个新对象并使b
指向此新对象。
答案 1 :(得分:0)
当你做这个
function update(a, b) {
a.val = "new";
b = {
val: "new"
};
}
您将b指向新对象,但仅限于更新功能
答案 2 :(得分:0)
实际上对象引用是按值传递给函数的, 这就是为什么当你改变它反映的属性时。 但是当你为b分配一个新对象时,函数内部的b被引用到了新对象。