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

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

  return w;
}

const weakMap = f();

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

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

4

1 回答 1

13

引用WeakMap对象部分

如果被用作 WeakMap 键/值对的键的对象只能通过遵循从该 WeakMap 中开始的引用链访问,则该键/值对是不可访问的,并且会自动从 WeakMap 中删除。

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

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

因此,最终将被垃圾收集。

于 2015-09-21T03:58:33.357 回答