一个"循环"参考被视为"可达性"对于弱地图?

时间:2015-09-21 03:53:32

标签: javascript weak-references weakmap

function f() {
  const w = new WeakMap();
  const o = {};

  w.set(o, { v: o });

  return w;
}

const weakMap = f();

对于给定的代码,唯一的weakMap项是否可以被认为是可达的?因此,它是否会被垃圾收集?

PS:这个问题是从规范的角度提出的,而不是特定的实现。

1 个答案:

答案 0 :(得分:11)

引用WeakMap Objects section

  

如果一个被用作WeakMap键/值对的键的对象只能通过跟随在该WeakMap内开始的一系列引用来访问,那么该键/值对将不可访问并自动从WeakMap中删除

在您的情况下,到达o的唯一方法是从weakMap中的一个键开始,因为没有外部引用它。因此,它将被视为无法访问。

  

WeakMap实现必须检测并删除此类键/值对以及任何相关资源。

所以,最终会收集垃圾。