2016-03-02 60 views
0

WeakMap在JavaScript中的正確用法是什麼?我使用它時可能會發生什麼樣的時間問題?特別是,我想知道在以下情況會發生什麼:使用EcmaScript中的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

WeakMap s被明確設計爲不具有最小可觀察垃圾收集行爲。將會有絕對零的問題。

在您的具體situtation,只要你持有的對象或功能(通過仍在堆棧上的生存變量o1o2)的引用,你就可以找到他們在WeakMapWeakSet。只要你不再提及它們,並且沒有人提及它們,它們就有資格進行垃圾回收(就像往常一樣) - 因此,沒有人能夠嘗試在回收中查找它們。

+0

謝謝!如果map key是一個字符串呢? – vmg

+1

@VitaliyGanzha:這就是爲什麼你不能在弱集合中使用字符串作爲鍵的原因:-) – Bergi

相關問題