值的不可变
- JS中值分为两种:原始类型和对象类型。
- 原始类型:字符串和数字都是属于原始类型,本身是不可变的。
- 对象类型: 数组和对象都是属于对象类型,这类数据更像是一种数据结构活着容器,这类的值是可变的。
结构型值的不可变(闭包和对象)
- 闭包和对象:这二者都可以对一个状态值进行封装和创建行为。
- 闭包:闭包的特点就是可以突破生命周期和作用域的限制,也就是时间和空间的控制。
- 突破生命周期的限制:当一个外部函数内嵌一个内部函数时,如果内嵌函数引用了外部函数的变量 ,这个变量就会突破生命周期的限制,在函数执行结束后,仍热存在。
- 突破作用域的限制:我们可以把一个内部函数返回成一个方法在外部调用。也可以通过对象来封装一个状态,并且创建一个方法来作用这个状态值。
- 结构型不可变:
- 概念:属性隐私:可见性,可更改。状态拷贝。性能(内存/计算)。
- 闭包:
- 可见性:默认隐藏,可通过接口读取。
- 可更改:可通过接口细粒度控制更改。
- 状态拷贝:相对难拷贝。
- 性能:性能相对较低。
- 对象:
- 可见性:默认可见。
- 可更改:可通过freeze保持整体不可变。
- 状态拷贝:相对易拷贝。
- 性能:性能相对较高。