浅谈闭包
闭包的作用:私有化变量和缓存变量
浅谈 Object.freeze()
对象常量
结合 writable: false 和 configurable: false 可以创建一个整整的常量属性(不可修改、重定义和删除)
1 | const obj = {} |
禁止扩展 Object.preventExtensions(obj)
禁止一个对象添加新属性,并保留已有属性,可以使用 Object.preventExtensions(obj)
1 | const obj = {} |
密封 Object.seal(obj)
Object.seal(obj) 会创建一个 “密封” 对象,这个方法实际上会在一个现有对象上调用 Object.preventExtensions(obj),并把所有属性表记为 configurable: false
所以,密封之后不仅不能添加新属性,也不能重新配置或者删除任何现有属性(虽然可以修改属性的值)
冻结 Object.freeze(obj)
Object.freeze(obj) 会创建一个冻结对象,这个方法实际上会在一个现有对象上调用 Object.seal(obj),并把所有 “数据访问” 属性标记为 writable: false,这样就无法修改它们的值
这个方法是你可以应用在对象上级别最高的不可变性,它会禁止对于对象本身及其任意直接属性的修改(属性引用的其他对象不受影响)
如果想 “深度冻结” 一个对象,对该对象调用 Object.freeze(obj),在遍历所有引用的对象,并在这些对象上调用 Object.freeze(..),需要注意,这样会无意中冻结其他对象