【发布时间】:2018-03-05 15:55:16
【问题描述】:
我已经阅读了这里的问题和答案:
但我还不够清楚为什么数字(原始类型)是不可变的?仅仅因为他们创建了一个新的引用但没有覆盖该值?
如果在每个assignemt 上都创建了一个新的引用
var x = 5;
x = 1;
我们会在下面的循环中有 100 次新的引用吗?
while (x < 101)
{
x++;
}
这样有效吗?我觉得我看的不对。
【问题讨论】:
-
如果数字 5 是可变的,这意味着什么?
-
阅读您链接的问题中的答案:数字本身是不可变的(或者您可以说常量)。变量 x 是对数字/常数的引用。它还在那里说它在所有编程语言中都是相同的。否则,您可能会删除/覆盖数字并弄乱该语言可以执行的整个数学/计算。对吗?
-
嗯,但是如果这个数字有点恒定,为什么我们可以重新分配它们的值? x= 5 然后 x=1。
-
你不能。
x是变量,5和1是数字。数字是不可变的,使用允许重新分配的关键字声明的变量(在当前的 JS 中,var和let)不是。至于“它有效率吗?”:是的。处理器在硬件级别理解数字。并且您的代码在每次迭代中都有相同的引用x到不同的数字。 -
没有对原始数字的引用。这些数字始终作为变量值存储在内存中的同一位置。