了解基本变量概念



我很难理解变量的交换。有许多有用的线程解释了如何实际做到这一点,但我很难理解它。我说的例子是:

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

在我的(非常基本的)理解中,我用简单的英语读到:每个声明的变量 c 包含变量 a 指向的任何内容。由于我们在声明后分配 a = b,下一个赋值不应该让 b 保持值 2(因为 c 指向我们刚刚分配给 ba)?

JavaScript 是按调用/分配的(更具体地说,通过共享调用/分配),即当您将一个变量分配给另一个变量时,该变量的值被复制。为变量分配新值永远不会更改另一个变量的值。它们之间没有隐含的联系。

更直观一点:假设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

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

c = a;

变量"C"具有"A"中值的副本。 随后将变量"b"的值副本赋值到"a"对"c"的值没有影响。

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

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

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

最新更新