function f() {
const w = new WeakMap();
const o = {};
w.set(o, { v: o });
return w;
}
const weakMap = f();
对于给定的代码,唯一的weakMap
项是否可以被认为是可达的?因此,它是否会被垃圾收集?
PS:这个问题是从规范的角度提出的,而不是特定的实现。
答案 0 :(得分:11)
如果一个被用作WeakMap键/值对的键的对象只能通过跟随在该WeakMap内开始的一系列引用来访问,那么该键/值对将不可访问并自动从WeakMap中删除
在您的情况下,到达o
的唯一方法是从weakMap
中的一个键开始,因为没有外部引用它。因此,它将被视为无法访问。
WeakMap实现必须检测并删除此类键/值对以及任何相关资源。
所以,最终会收集垃圾。