当HTML元素同时作为Map键与WeakSet值时,WeakSet会触发垃圾回收吗?
问题解答:DOM元素作为Map键时WeakSet中的元素是否会被垃圾回收?
结论很明确:不会被垃圾回收,核心原因在于两种集合的引用特性差异:
Map对键使用的是强引用:只要你的Map实例还存在,作为键的DOM元素就会被持续持有——哪怕它已经从DOM树中移除,这个强引用依然会阻止垃圾回收器回收该元素。WeakSet对值使用的是弱引用:它本身不会阻止元素被回收,但前提是没有其他强引用指向该元素。
在你的场景里,Map的强引用是关键:只要元素还在Map的键里,就相当于有一个“锚点”把它挂在内存里,WeakSet里的弱引用不会改变这个结果。只有当你从Map中删除该元素的键(或者整个Map实例被回收),同时DOM和其他地方也没有该元素的强引用时,垃圾回收器才会回收这个元素,WeakSet里的对应条目也会随之被自动清理。
内容的提问来源于stack exchange,提问作者Djordje Vuckovic
相关产品推荐
相关产品推荐

