如何通过WeakMap实现DOM节点私有状态绑定,自动回收内存?
- 内容介绍
- 相关推荐
本文共计954个文字,预计阅读时间需要4分钟。
由于WeakMap的键是弱引用,当DOM节点被移除且没有其他强引用时,整个键值对会自动从WeakMap中消失,无需手动清理。这与Map不同:
典型误用场景:用 Map + node.id 或 node.dataset.id 当 key,结果节点删了状态还留着,内存持续增长。
关键前提:WeakMap 的 key 必须是对象(DOM 节点符合),value 可以是任意类型;但不能用字符串、数字或 null 当 key,否则会直接报错 TypeError: Invalid value used as weak map key。
本文共计954个文字,预计阅读时间需要4分钟。
由于WeakMap的键是弱引用,当DOM节点被移除且没有其他强引用时,整个键值对会自动从WeakMap中消失,无需手动清理。这与Map不同:
典型误用场景:用 Map + node.id 或 node.dataset.id 当 key,结果节点删了状态还留着,内存持续增长。
关键前提:WeakMap 的 key 必须是对象(DOM 节点符合),value 可以是任意类型;但不能用字符串、数字或 null 当 key,否则会直接报错 TypeError: Invalid value used as weak map key。

