Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Когда элементы WeakMap удаляются сборщиком мусора?

Вопрос проверяет понимание механизма сборки мусора в JavaScript и ключевое отличие WeakMap от Map, что важно для управления памятью и предотвращения утечек.

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

Элементы WeakMap удаляются сборщиком мусора, когда на их ключи больше нет сильных ссылок из других частей программы. В отличие от Map, WeakMap хранит ключи как слабые ссылки, что не препятствует сборке мусора. Это полезно для хранения метаданных или кэшей, связанных с объектами, время жизни которых вы не контролируете. Когда объект-ключ становится недостижим, соответствующая пара ключ-значение автоматически удаляется из WeakMap.

Длинный ответ

WeakMap — это коллекция в JavaScript, которая позволяет хранить пары ключ-значение, где ключами могут быть только объекты. Его главная особенность — хранение слабых ссылок на ключи. Это означает, что наличие ключа в WeakMap не удерживает этот объект в памяти.

Как работает сборка мусора с WeakMap

Сборщик мусора в JavaScript периодически освобождает память, удаляя объекты, которые больше не достижимы из корня программы (например, глобального объекта). Если объект является ключом в WeakMap, но на него больше нет других (сильных) ссылок, сборщик мусора может удалить этот объект. После удаления объекта-ключа соответствующая пара ключ-значение автоматически исчезает из WeakMap.

Практическое применение

  • Хранение приватных данных: Привязка скрытых метаданных к объектам DOM или сторонним библиотекам без влияния на их время жизни.
  • Кэширование: Создание кэша, где записи автоматически очищаются при удалении основного объекта.
  • Ассоциация временных данных: Например, хранение состояния для объектов, которые могут быть в любой момент удалены.

Пример кода

// Создаем объект и WeakMap
let obj = { id: 1 };
const weakMap = new WeakMap();

// Сохраняем объект как ключ
weakMap.set(obj, 'секретные данные');
console.log(weakMap.has(obj)); // true

// Удаляем единственную сильную ссылку на объект
obj = null;

// Теперь сборщик мусора может удалить объект.
// Пара ключ-значение будет удалена из WeakMap.
// Проверить это напрямую нельзя, так как у WeakMap
// нет методов для итерации или получения размера.

Вывод: Используйте WeakMap, когда вам нужно ассоциировать дополнительные данные с объектами, время жизни которых управляется извне (например, DOM-узлы или объекты из сторонних библиотек), и вы хотите избежать утечек памяти. Это идеальный инструмент для сценариев, где данные должны автоматически очищаться вместе с объектом-ключом.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

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

#WeakMap

#garbage collection

#memory management

#JavaScript

#reference

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