从EcmaScript使用WeakMap时,时间问题需要考虑

时间:2016-03-02 22:48:21

标签: javascript garbage-collection ecmascript-6 weakmap

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中没有字符串作为键的事实,如果我考虑到这个事实,我的问题就没有了。

1 个答案:

答案 0 :(得分:1)

WeakMap被明确设计为不显示最不可观察的垃圾收集行为。绝对没有问题。

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