Пусть теперь к нашим абзацам привязана анонимная функция:
let elems = document.querySelectorAll('p');
for (let elem of elems) {
elem.addEventListener('click', function() {
alert(this.innerHTML);
});
}
Пусть мы хотим отвязать эту функцию от абзаца после клика по этому абзацу. Нас, однако, ждет проблема: у функции нет имени, а значит мы не сможем обратится к ней по этому имени, чтобы отвязать ее.
Для решения проблему нужно дать имя функции, сделав из нее именованное функциональное выражение. Сделаем это:
let elems = document.querySelectorAll('p');
for (let elem of elems) {
elem.addEventListener('click', function func() { // дали имя функции
alert(this.innerHTML);
});
}
Теперь эту функцию можно отвязать внутри нее самой:
let elems = document.querySelectorAll('p');
for (let elem of elems) {
elem.addEventListener('click', function func() {
alert(this.innerHTML);
this.removeEventListener('click', func); // отвязываем функцию
});
}