老实说,我不太确定您期望什么样的答案,因为我不太明白您感到困惑的是什么。但我们开始吧:
在下面的循环中我们会有 100 次新的引用吗?
变量只是值的容器。在底层,变量基本上只是内存地址或寄存器的标签。例如。多变的x
可能指向注册R1
.
x++
只需将存储在该寄存器中的数字增加1
。假设我们的寄存器如下所示:
R1: 5
递增后,可以是单个操作,例如ADD R1 1
,我们会得到
R1: 6
IE。我们简单地用一个新值覆盖以前的值。我们多次这样做。
这样有效率吗?我想我看的不正确。
将数字加一是最简单的操作。
当然,您可以在更高的级别上实现可变数字,但这肯定不会使事情变得更高效或更简单。
可变性对于“单值”值没有多大意义,因为改变这样的值基本上意味着“就地”用不同的值替换它。
可变性对于由其他值(例如列表和字典)组成的值更有意义,其中一部分发生变化,另一部分保持不变。
此外,只有当语言具有可变性时,可变性才显得相关。参考类型数据类型。我的意思是多个变量可以保存对数据类型的相同值的引用。 JavaScript 中的对象是引用类型,这允许您执行以下操作:
var a = {foo: 42};
var b = a;
b.foo = 21;
console.log(a);
如果数据类型不是引用类型,称为值类型(JavaScript 中的原始值),那么可变性并不重要,因为它与不变性没有区别。考虑以下带有可变值类型数字的假设场景:
var a = MutableNumber(42);
var b = a; // creates a copy of MutableNumber(42) because it's a value type
a.add(1);
console.log(a, b); // would log 43, 42
在这种情况下,两个变量不可能引用相同的可变数值,a.add(1)
与分配新值没有区别a
(i.e. a = a + 1
).