Снять все слушатели одним вызовом
Вопрос
Компонент вешает пять слушателей на window и document. Как проще всего гарантированно снять их все при уничтожении?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Вызвать
window.removeEventListener('*')и то же самое дляdocument - Присвоить
window.onresize = nullиdocument.onclick = null - Передать всем
addEventListener{ signal }и вызватьcontroller.abort()правильный ответ - Ничего не делать: слушатели снимаются сами, когда компонент удалён из DOM
Разбор
addEventListener принимает signal от AbortController, и при abort() все такие слушатели снимаются разом. Не нужно хранить ссылки на функции для removeEventListener. Удалить все слушатели по маске нельзя, такого API нет. onresize = null снимает только обработчик-свойство, а не добавленные через addEventListener. Слушатели на window и document живут, пока живут эти объекты, то есть всю жизнь страницы, удаление компонента их не трогает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.