虽然有些人说这个问题之前已经得到了回答,但它只是之前给出了一个具有更多细节的不同问题的答案(即专门询问有关参考号/按值调用的问题) ,而这个问题并不预先假定知识。
以下代码似乎非常令人困惑。我们可以逻辑推断出z.id在函数之后更新的原因是因为它是一个对象。但为什么? javascript的特点或特点是什么?
function changea(a) {
a = 100; // does not change a
} // no return
function changez(z) {
z.id = 100; // does change z
} // no return
var a = 0; // a is zero
changea(a) // a variable
alert('variable a is equal to ' + a); // why does this stay at zero?
var z = {id: 0};
changez(z);
alert('variable z.id is equal to ' + z.id); // why does this change to 100
在此处查看演示:http://jsfiddle.net/u0pysgjy/7/
答案 0 :(得分:0)
在第一种情况下,a通过值传递给changea函数,在第二种情况下,z是一个对象,它通过引用传递给changez函数。每当一个函数获得一个按值传递给它的变量时,即使你改变它,它也不会反映在函数之外,就像a的情况一样。如果函数获取其参数,如果您更改其属性的值,则该参数将通过引用传递给它,它也将反映在函数外部。
有一个很好的解释here