对于WeakMap,"循环"引用是否会被视为"可达性"?

zer*_*kms 8 javascript weak-references weakmap

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

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

  return w;
}

const weakMap = f();
Run Code Online (Sandbox Code Playgroud)

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

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

the*_*eye 11

引用WeakMap对象部分,

如果正在用作WeakMap键/值对的键的对象只能通过跟随在该WeakMap内开始的一系列引用来访问,则该键/值对将无法访问并自动从WeakMap中删除.

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

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

所以,它最终会被垃圾收集.