Вопрос проверяет понимание механизма утечек памяти в JavaScript при работе с DOM и глобальными обработчиками событий.
Когда вы удаляете DOM-элемент из документа, но глобальный объект (например, window или глобальная переменная) продолжает хранить ссылку на обработчик события, который был привязан к этому элементу, возникает утечка памяти. Обработчик события замыкает ссылку на элемент, и сборщик мусора не может освободить память, так как на элемент все еще есть активная ссылка через цепочку: глобальный объект → обработчик → элемент.
Рассмотрим пример: вы добавляете обработчик клика на кнопку и сохраняете его в глобальном массиве. После удаления кнопки из DOM, обработчик остается в массиве, удерживая ссылку на удаленный элемент.
const handlers = [];
const button = document.getElementById('myButton');
const handler = () => console.log('click');
button.addEventListener('click', handler);
handlers.push(handler);
// Удаляем элемент
button.remove();
// Обработчик все еще в handlers, элемент не удаляется из памяти// Решение: удаляем обработчик перед удалением элемента
button.removeEventListener('click', handler);
button.remove();
// Или очищаем глобальную ссылку
handlers = handlers.filter(h => h !== handler);Для предотвращения утечек памяти всегда удаляйте обработчики событий перед удалением DOM-элементов, особенно если они хранятся в глобальных структурах данных. Это критично для долгоживущих приложений (SPA) и при работе с динамическими интерфейсами.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию