为什么一个变量会改变但另一个变量不会改变?

时间:2014-11-07 03:11:24

标签: javascript variables computer-science

虽然有些人说这个问题之前已经得到了回答,但它只是之前给出了一个具有更多细节的不同问题的答案(即专门询问有关参考号/按值调用的问题) ,而这个问题并不预先假定知识。

以下代码似乎非常令人困惑。我们可以逻辑推断出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/

1 个答案:

答案 0 :(得分:0)

在第一种情况下,a通过值传递给changea函数,在第二种情况下,z是一个对象,它通过引用传递给changez函数。每当一个函数获得一个按值传递给它的变量时,即使你改变它,它也不会反映在函数之外,就像a的情况一样。如果函数获取其参数,如果您更改其属性的值,则该参数将通过引用传递给它,它也将反映在函数外部。

有一个很好的解释here