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