Вопрос проверяет понимание управления памятью в JavaScript, включая механизмы сборки мусора и утечки памяти.
JavaScript использует автоматическое управление памятью через сборщик мусора (Garbage Collector). Память делится на стек (stack) для примитивов и ссылок, и кучу (heap) для объектов, массивов и функций. Сборщик мусора работает в фоновом режиме, освобождая память от объектов, которые больше не нужны.
Основной алгоритм — mark-and-sweep. Сборщик начинает с корневых объектов (глобальный объект window/global, текущие функции и их локальные переменные) и рекурсивно помечает все достижимые объекты. Затем он удаляет непомеченные объекты. Это циклический процесс, запускаемый при необходимости.
let element = document.getElementById('button');
element.addEventListener('click', () => {
console.log('clicked');
});
// Если элемент удалён из DOM, но слушатель не удалён,
// замыкание удерживает ссылку на элемент, вызывая утечку.
// Решение: удалять слушатель через removeEventListener.V8 делит объекты на молодое и старое поколения. Молодые объекты проверяются часто (Scavenger), старые — реже (Mark-Compact). Это ускоряет сборку, так как большинство объектов живут недолго.
Понимание сборки мусора помогает писать эффективный код без утечек памяти, особенно в долгоживущих приложениях (SPA, серверный JavaScript). Избегайте глобальных переменных, своевременно очищайте таймеры и слушатели событий.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию