2017-05-02 21 views
1

我对JavaScript将对象作为参数传递给函数的方式有些困惑。作为函数参数的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

aval属性被改变但的b不是。我在某处读对象是通过引用来传递函数。任何人都可以请解释这种行为。

在此先感谢。

回答

0

当你做出这个

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

您指向B到A的新对象,但只有在更新功能

+0

谢谢。这清除了混乱 –

0

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

0

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