【问题标题】:Why does one variable change but the other does not? [duplicate]为什么一个变量会改变而另一个变量不会? [复制]
【发布时间】:2014-11-07 03:11:23
【问题描述】:

虽然有些人说这个问题以前已经回答过,但它只是以前对另一个更具体的问题给出的答案(即专门询问按引用调用/按值调用) ,而这个问题并不预设任何一个知识)

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

【问题讨论】:

标签: javascript variables computer-science


【解决方案1】:

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

有一个很好的解释here

【讨论】:

  • 您基本上重申了我的问题:对象已更改,变量未更改。这不是我要找的答案。我想知道它背后的计算机科学,LJ_1102 正确地回答了它,我学习了新术语,pass-by-reference,pass-by-value。真正的答案在您链接到的解释中,并且在您发布之前,我也将该链接发布到了我的答案中。不知道为什么你的被赞成而我的被反对。
  • 我没有重述您的问题。实际上,我试图在您的流程中回答您的问题,以便您理解。我在回答中提到了术语按值传递和按引用传递。进一步解释这些术语我分享了一个so问题链接,以便您了解更多。您的问题被否决了,因为它是一种重复的问题,并且您的问题的答案已经在so中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 2019-07-14
  • 2011-05-12
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
相关资源
最近更新 更多