2014-11-07 103 views
0

虽然有些人说这个问题之前已经得到了回答,但它只能回答以下具体问题的另一个问题(即具体询问引用引用/按值引用,而这个问题并不以此为前提)为什么一个变量会改变,但另一个不变呢?

下面的代码看起来很混乱。我们可以从逻辑上推论出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

看到这个问题:http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language – 2014-11-07 03:14:47

+0

非常感谢您的指出 – docodemore 2014-11-07 03:23:08

回答

0

在第一种情况一个由值传递给changea功能和在第二种情况下z为一个对象,它是通过参考changez功能通过。每当一个函数获得一个通过值传递给它的变量,即使你改变了它的值,它也不会反映在函数之外。如果一个函数通过引用传递给它的参数,如果你改变了它的属性值,它也会反映到函数之外。

有一个很好的解释here

+0

您基本上重申了我的问题:对象被更改,变量不是。这不是我正在寻找的答案。我想知道它背后的计算机科学,并且LJ_1102正确回答了它,并且我学习了新的术语,通过引用,传递值。真正的答案在于你所链接的解释,并且在你做之前,我也发布了链接到我的答案。不知道为什么你会得到upvoted和我的downvoted。 – docodemore 2014-11-07 15:40:42

+0

我没有重申你的问题。其实我试图在你的流程中回答你的问题,以便你能理解。我在回答中提到了按价值传递和通过引用传递的条款。有关这些术语的进一步解释,我分享了一个这样的问题链接,以便你可以了解更多。你的问题得到了downvote,因为它是一种重复的问题,你的问题的答案已经如此。 – 2014-11-08 06:03:22

相关问题