理解基本的变量概念
Understanding basic variable concepts
我很难理解变量的交换。有许多有用的线程解释了如何实际执行此操作,但我很难理解它。我说的例子是:
var a = 1;
b = 2;
c = a;
a = b;
b = c;
在我的(非常基本的)理解中,我用简单的英语将其读为:每个声明的变量 c 包含变量 a指着。因为我们在声明之后赋值 a = b,下一个赋值不应该让 b 保持值 2(因为 c 指向我们刚刚分配给 b)?
的 a
JavaScript 是 call/assign by value (more specifically, call/assign by sharing) 即当您将一个变量分配给另一个变量时,该变量的值将被复制。为变量分配新值 永远不会 更改另一个变量的值。它们之间没有隐含的link。
更直观一点:假设 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 中,将一个变量的值赋给另一个变量会分配一个 copy 的值。于是在
之后
c = a;
变量 "c" 具有 "a" 中值的副本。随后将变量 "b" 的值的副本分配给 "a" 对 "c".
的值没有影响
赋值运算符将右侧的值复制到左侧的变量。它不会创建对变量的引用。
语句c = a
运行时,a
的值仍然是1
,所以c
的值变为1
.
您没有在代码的其他任何地方更改 c
的值,因此当您达到 b = c
时,该值仍然是 1
。
我很难理解变量的交换。有许多有用的线程解释了如何实际执行此操作,但我很难理解它。我说的例子是:
var a = 1;
b = 2;
c = a;
a = b;
b = c;
在我的(非常基本的)理解中,我用简单的英语将其读为:每个声明的变量 c 包含变量 a指着。因为我们在声明之后赋值 a = b,下一个赋值不应该让 b 保持值 2(因为 c 指向我们刚刚分配给 b)?
的 aJavaScript 是 call/assign by value (more specifically, call/assign by sharing) 即当您将一个变量分配给另一个变量时,该变量的值将被复制。为变量分配新值 永远不会 更改另一个变量的值。它们之间没有隐含的link。
更直观一点:假设 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 中,将一个变量的值赋给另一个变量会分配一个 copy 的值。于是在
之后c = a;
变量 "c" 具有 "a" 中值的副本。随后将变量 "b" 的值的副本分配给 "a" 对 "c".
的值没有影响赋值运算符将右侧的值复制到左侧的变量。它不会创建对变量的引用。
语句c = a
运行时,a
的值仍然是1
,所以c
的值变为1
.
您没有在代码的其他任何地方更改 c
的值,因此当您达到 b = c
时,该值仍然是 1
。