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将如何影响WeakMaps?
更新:我的不好,我错过了你在WeakMap中没有字符串作为键的事实,如果我考虑到这个事实,我的问题就没有了。
答案 0 :(得分:1)
WeakMap
被明确设计为不显示最不可观察的垃圾收集行为。绝对没有问题。
在您的特定情况下,只要您持有对象或函数的引用(通过仍在堆栈中的实时变量o1
和o2
),您将能够在WeakMap
或WeakSet
中找到它们。一旦你不再提及它们,没有人这样做,它们就有资格进行垃圾收集(就像往常一样) - 并且鉴于此,没有人能够尝试在集合中查找它们