Проверяет понимание механизма слабых ссылок в JavaScript и особенностей сборки мусора для объектов, хранящихся в WeakSet и WeakMap.
В JavaScript ссылки бывают сильными и слабыми. Сильная ссылка (обычное присваивание) удерживает объект в памяти, пока на него есть хотя бы одна такая ссылка. Слабая ссылка, напротив, не мешает сборщику мусора удалить объект, если на него нет сильных ссылок. WeakMap и WeakSet используют именно слабые ссылки для своих ключей (в WeakMap) или значений (в WeakSet).
Сборщик мусора периодически проверяет, какие объекты больше не доступны из корневых узлов (глобальный объект, текущий стек вызовов). Если на объект есть только слабые ссылки, он считается недоступным и удаляется. Например, если вы храните DOM-элемент как ключ в WeakMap, а затем удаляете элемент из DOM и обнуляете все сильные ссылки на него, сборщик мусора удалит и элемент, и соответствующую запись в WeakMap.
let obj = { data: 'temp' };
const wm = new WeakMap();
wm.set(obj, 'metadata');
console.log(wm.get(obj)); // 'metadata'
obj = null; // удаляем сильную ссылку
// После сборки мусора запись в WeakMap будет удалена автоматическиWeakMap и WeakSet полезны для кэширования данных, связанных с временными объектами (например, DOM-элементами), или для хранения приватных данных без риска утечки памяти. Они не подходят для итерации или проверки размера, так как содержимое может измениться в любой момент.
Вывод: Используйте WeakMap/WeakSet, когда нужно хранить дополнительные данные для объектов, жизненный цикл которых вы не контролируете напрямую, чтобы избежать утечек памяти.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию