Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: WeakMap, WeakSet, garbage collection, weak reference, memory leak

Что такое слабые ссылки и когда сборщик мусора удаляет объекты из WeakSet/WeakMap?

Проверяет понимание механизма слабых ссылок в JavaScript и особенностей сборки мусора для объектов, хранящихся в WeakSet и WeakMap.

Короткий ответ

Слабые ссылки не препятствуют сборке мусора. Объекты в 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

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#WeakMap

#WeakSet

#garbage collection

#weak reference

#memory leak

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию