JavaScript Objects作为函数的参数

时间:2017-05-02 06:12:58

标签: javascript javascript-objects

我对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);

输出如下:

enter image description here

val的{​​{1}}属性已更改,但a的属性未更改。我在某处读到了对象通过引用传递给函数。任何人都可以解释这种行为。

提前致谢。

3 个答案:

答案 0 :(得分:0)

a情况下,您正在更改变量a指向的对象。在b情况下,您正在创建一个新对象并使b指向此新对象。

答案 1 :(得分:0)

当你做这个

function update(a, b) {
  a.val = "new";
  b = {
    val: "new"
  };
}

您将b指向新对象,但仅限于更新功能

答案 2 :(得分:0)

实际上对象引用是按值传递给函数的, 这就是为什么当你改变它反映的属性时。 但是当你为b分配一个新对象时,函数内部的b被引用到了新对象。