Проверяет понимание того, как removeEventListener сопоставляет обработчик для удаления и почему важно передавать ту же ссылку на функцию.
Метод removeEventListener не ищет обработчик «по имени» или по телу функции. Он сравнивает параметры вызова с теми, что были переданы в addEventListener: тип события, ссылку на функцию-обработчик и флаг capture. Совпадение должно быть точным, иначе браузер просто ничего не удалит и не выбросит ошибку.
"click".false).Ключевой момент — ссылочное равенство функций. Две функции с одинаковым кодом, но созданные отдельно, считаются разными объектами.
function onClick() {
console.log('clicked');
}
// Работает: одна и та же ссылка
btn.addEventListener('click', onClick);
btn.removeEventListener('click', onClick);
// Не работает: разные ссылки
btn.addEventListener('click', () => console.log('a'));
btn.removeEventListener('click', () => console.log('a'));
Каждый вызов () => {} создаёт новый объект функции. Даже если код идентичен, это уже другая ссылка, поэтому removeEventListener не находит совпадения. Решение — сохранить функцию в переменной или в свойстве объекта.
const handler = () => console.log('clicked');
btn.addEventListener('click', handler);
btn.removeEventListener('click', handler);
Если обработчик добавлен с { capture: true }, удалять его нужно с тем же значением. Иначе браузер считает это другим слушателем.
btn.addEventListener('click', handler, { capture: true });
btn.removeEventListener('click', handler, { capture: true });
Итог: removeEventListener сопоставляет слушателей по типу события, ссылке на функцию и флагу capture. Чтобы удаление работало, храните ссылку на обработчик и передавайте те же параметры, что и при добавлении.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
HTML
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию