Будет ли "круговая" ссылка рассматриваться как "достижимость" для 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 должны обнаруживать и удалять такие пары ключ / значение и любые связанные ресурсы.
Таким образом, это будет в конечном итоге мусора.