使用 EcmaScript 中的 WeakMap 时,时序问题注意事项

Timing issues considerations when using WeakMap from EcmaScript

本文关键字:问题 注意事项 使用 中的 WeakMap EcmaScript      更新时间:2023-09-26

JavaScript 中 WeakMap 的正确用法是什么?使用时可能会出现什么样的计时问题?特别是,我想知道在以下情况下会发生什么:

var wm1 = new WeakMap()
var o1 = {},
o2 = function(){},
o3 = window;
// in other method:
    wm1.set(o1, 37);
    wm1.set(o2, "azerty");
    if (wm1.has(o2)) {
    //Garbage collection happen here, objects from wm1 may no longer exists
    Console.log(wm1.get(o2)) // what will happen here? just undefined? null?
    }

GC 将如何影响弱图?

更新:我的错,我错过了你不能在 WeakMap 中将字符串作为键的事实,如果我考虑到这一事实,我的问题就不会成立。

WeakMap

明确设计为不表现出最不明显的垃圾回收行为。绝对不会有任何问题。

在您的特定位置中,只要您持有对对象或函数的引用(通过仍在堆栈上的实时变量o1o2),您就可以在WeakMapWeakSet中找到它们。一旦你不再引用它们,也没有人这样做,它们就有资格进行垃圾收集(就像往常一样) - 鉴于此,没有人能够尝试在收集中查找它们。