Pro*_*mma 2 javascript variables mutable immutability
我目前正在JavaScript的学习过程中,真的对不可变值感到困惑。据我了解,当创建一个值(stings / numbers / booleans)时,就永远无法更改它。
现在我的问题是,我分配值的变量,该变量的值是可变的。我可以为该变量分配新值。那么为什么不变性很重要?
另外,当我为变量分配新值时,以前的值会怎样?它会保留在内存中并阻塞一些空间吗?它是否失去了该变量的指针?究竟会发生什么?
请帮助我了解JavaScript中“可变”和“不可变”概念的实际用法。提前致谢。
变量的分配与不可变或可变的对象无关。变量只是别名:它指向内存中的对象。更改变量的值时,您要做的就是告诉编译器停止将该对象与该变量关联,而是将其与另一个对象关联。分配不会影响基础对象-该对象永不变,您不再拥有访问它的方法。
通常,当丢失对一个对象的所有引用时,它们将被垃圾回收,即释放为该对象分配的内存,并且该对象将永远丢失。但是,这也与不可变对象和可变对象之间的差异无关。
不可变的对象不会在适当位置修改对象(即更改其外观),它们会返回更改了变量的新数据副本。
Javascript中的可变对象不会返回副本,但是可以让您更改对象本身。
我把它比作array.splice()和之间的区别array.slice()。splice()将通过在需要时删除/插入元素来更改原始数组- slice()将仅使用所需元素创建一个新数组。可以使它们做相同的事情-但是一个改变数组的位置,另一个改变创建副本。
不变的对象在被更改时总是被迫返回一个新副本-它本身不会被更改。可变对象可以(但不必)在适当位置进行突变。Javascript中的原始类型大部分是不可变的-创建后就无法更改字符串的形式(如果调用replaceJS字符串,则会收到一个新字符串,其中包含您要替换的值,而不是更改了值的字符串) 。对象大部分是可变的:例如,您可以object[key] = value在引用对象的任何地方进行更改。
当您更改一个可变对象时,在引用它的任何地方都会对其进行更改。当您更改不可变对象时,它根本不会更改-创建了一个新对象,并且对该对象的所有旧引用都将为您提供原始对象,与此没有任何不同。
| 归档时间: |
|
| 查看次数: |
1599 次 |
| 最近记录: |