function f() {
const w = new WeakMap();
const o = {};
w.set(o, { v: o });
return w;
}
const weakMap = f();
对于给定的代码,唯一的weakMap
项目是否被视为可达?那么,它会被垃圾收集吗?
PS:这个问题是从规范的角度提出的,而不是特定的实现。
Quoting WeakMap对象部分 http://www.ecma-international.org/ecma-262/6.0/#sec-weakmap-objects,
如果用作 WeakMap 键/值对的键的对象只能通过该 WeakMap 中开始的引用链来访问,则该键/值对将不可访问并自动从 WeakMap 中删除。
在你的情况下,到达的唯一方法o
将从中的一个键开始weakMap
,因为没有外部引用它。因此,它将被视为无法访问。
WeakMap 实现必须检测并删除此类键/值对以及任何关联的资源。
所以,它最终会被垃圾收集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)