加载中...

WeakMap 与 WeakSet 是 ES6 引入的弱引用集合。WeakMap 的键、WeakSet 的成员必须是对象(或非注册 Symbol),且集合对它们持弱引用——当对象在别处不再被引用时,垃圾回收器可以直接回收它,集合中对应条目随之消失。
普通 Map 对键持强引用,把 DOM 节点或大对象作键会阻止其回收,造成内存泄漏;WeakMap 则不会。代价是弱集合不可遍历、没有 size、没有 clear:因为条目可能随 GC 随时消失,暴露遍历能力会使 GC 行为可观测,破坏确定性。
典型用途包括:给第三方对象或 DOM 元素关联元数据而不改动对象本身;在 class 私有字段(#field)普及前用 WeakMap 模拟私有状态;缓存以对象为键的计算结果;记录"已处理过"的对象集合(WeakSet)。
后续标准还引入了 WeakRef 与 FinalizationRegistry,提供更直接的弱引用与回收回调能力,但规范本身建议谨慎使用,因为 GC 时机不可依赖。

登录 后参与讨论
暂无讨论,来发表第一条评论吧