GC はオブジェクト グラフの孤立した島を検出してメモリから削除する候補を見つけ、WeakMap は弱い参照で島の境界を壊さないWeakMap -> KeyObject
ため、この参照WeakMap -> Value -> KeyObject
が弱いWeakMap -> Value
参照で島の境界を壊さないことは理にかなっていますが、Value -> KeyObject
参照は明らかに強いです。
例:
let o = {test:1};
let map = new WeakMap();
map.set(o, {strongRef: o});
o = null; // clear last reference on {test:1}
// will {test:1} be GCed after this ?