0

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 で文字列をキーとして使用できないという事実を見逃しました。その事実を考慮に入れると、私の質問はうまくいきません。

4

1 に答える 1

1

WeakMaps は、ガベージ コレクションの動作が最も観測されにくいものにならないように明示的に設計されています。問題は絶対にゼロになります。

o1特定の状況では、オブジェクトまたは関数への参照を (ライブ変数を介して、まだスタック上にある) 保持している限り、またはo2でそれらを見つけることができます。それらへの参照を保持しなくなり、誰も保持しなくなるとすぐに、それらはガベージ コレクションの対象になります (通常どおり)。WeakMapWeakSet

于 2016-03-02T23:20:26.747 に答える