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设计的目的应该是就是给对象添加元数据的吧。将数据绑定到对象上,对这个对象却是弱引用。避免无法垃圾回收。

posted @ 2022-05-26 13:34  吴飞ff  阅读(78)  评论(0编辑  收藏  举报