WeakSet 和 WeakMap
参考:https://juejin.cn/post/6844903959283367950?share_token=22940025-17cb-4d07-a81c-4120f92c07e4#heading-14
先介绍下 set 和 map
- Set:ES6 新增的一种新的数据结构,类似于数组,但成员是唯一且无序的,没有重复的值。
- map:
WeakSet:
WeakSet 对象允许你将弱引用对象储存在一个集合中。
- 应用场景:
- 储存DOM节点:DOM节点被移除时自动释放此成员,不用担心这些节点从文档移除时会引发内存泄漏
- 临时存放一组对象或存放跟对象绑定的信息:只要这些对象在外部消失,它在
WeakSet结构
中的引用就会自动消
WeakMap:
WeakMap 对象是一组键值对的集合,其中的键是弱引用对象,而值可以是任意。
注意,WeakMap 弱引用的只是键名,而不是键值。键值依然是正常引用。
- 应用场景:
- 储存DOM节点:DOM节点被移除时自动释放此成员键,不用担心这些节点从文档移除时会引发内存泄漏
- 部署私有属性:内部属性是实例的弱引用,删除实例时它们也随之消失,不会造成内存泄漏
总结:这种弱引用应该就是为了解决 DOM这种 循环引用时,无法被被垃圾回收的引用方式而出现的。DOM销毁时,弱引里面对应的DOM对象也会被回收掉。
个人理解: WeakMap设计的目的应该是就是给对象添加元数据的吧。将数据绑定到对象上,对这个对象却是弱引用。避免无法垃圾回收。