理解基本变量概念

时间:2015-01-05 17:05:09

标签: javascript language-concepts

我很难理解变量的交换。有许多有用的线程解释如何实际执行它,但我很难理解它。我正在谈论的例子是:

var a = 1;
    b = 2;
    c = a;
a = b;
b = c;

在我的(非常基本的)理解中,我用简单的英语读到:每个声明的变量 c 保存 a 指向的变量。由于我们在声明后指定 a = b ,因此下一个分配不应该使 b 保持值2(因为 c 指向< strong> a 我们刚刚分配给 b )?

3 个答案:

答案 0 :(得分:7)

JavaScript是call/assign by value(更具体地说,call/assign by sharing)I.e。将变量分配给另一个变量时,将复制该变量的值。为变量从不分配新值会更改另一个变量的值。它们之间没有隐含的联系。

更具视觉效果:假设b保留值v,那么在a = b后,我们有

b -> v
a -> v

您似乎认为我们有a -> b -> v,而

在你的例子中:

c = a; // c now holds the value 1
a = b; // a now holds the value 2
b = c; // b now holds the value 1

答案 1 :(得分:1)

不,在JavaScript中,将一个变量的值分配给另一个变量会分配值的副本。因此

之后
c = a;

变量“c”具有“a”中的值的副本。随后将变量“b”的副本分配给“a”对“c”的值没有影响。

答案 2 :(得分:1)

赋值运算符将右侧的值复制到左侧的变量。它不会创建对变量的引用。

当语句c = a运行时,a的值仍为1,因此c的值变为1

您不会在代码中的任何其他位置更改c的值,因此当您到达b = c时,该值仍为1