Выбор ответа Senior Память и сборка мусора обновлено

Что возвращает WeakRef.deref

Вопрос

Что вернёт ref.deref() для const ref = new WeakRef(obj)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Сам obj, если он ещё не собран, иначе undefined. WeakRef хранит слабую ссылку, не мешающую сборке. deref() возвращает исходный объект (не копию), пока он жив, и undefined после того, как сборщик его освободил.

Варианты ответа

  1. Всегда копию obj
  2. Сам obj, если он ещё не собран, иначе undefinedправильный ответ
  3. Промис, который выполнится, когда объект соберут
  4. true или false в зависимости от того, жив ли объект

Разбор

WeakRef хранит слабую ссылку, не мешающую сборке. deref() возвращает исходный объект (не копию), пока он жив, и undefined после того, как сборщик его освободил. Момент сборки непредсказуем, поэтому код должен быть готов к обоим вариантам. Уведомление о сборке даёт FinalizationRegistry, и то без гарантий. Спецификация советует использовать WeakRef редко: для кешей больших объектов, а не для логики приложения.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.