Будет ли "круговая" ссылка рассматриваться как "достижимость" для WeakMap?

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

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

  return w;
}

const weakMap = f();

Для данного кода, единственным weakMap предмет считается достижимым или нет? Следовательно, это будет мусор или нет?

PS: этот вопрос задается с точки зрения спецификации, а не конкретных реализаций.

1 ответ

Решение

Квотирование WeakMap Раздел объектов,

Если объект, который используется в качестве ключа пары ключ / значение WeakMap, доступен только по цепочке ссылок, которые начинаются внутри этого WeakMap, то эта пара ключ / значение недоступна и автоматически удаляется из WeakMap.

В вашем случае единственный способ достичь o будет начинаться с одного из ключей в weakMap, так как нет внешних ссылок на него. Таким образом, это будет считаться недоступным.

Реализации WeakMap должны обнаруживать и удалять такие пары ключ / значение и любые связанные ресурсы.

Таким образом, это будет в конечном итоге мусора.

Другие вопросы по тегам