Отмятане на анонимни функции в JavaScript

Нека сега към нашите параграфи е прикачена анонимна функция:

javascriptlet elems = document.querySelectorAll('p');

for (let elem of elems) {
  elem.addEventListener('click', function() {
    console.log(this.textContent);
  });
}

Нека искаме да откачим тази функция от параграфа след кликване върху този параграф. Обаче, ни очаква проблем: функцията няма име, което означава, че няма да можем да се обърнем към нея по това име, за да я откачим.

За решаване на проблема трябва да дадем име на функцията, превръщайки я в именована функционална декларация. Нека направим това:

javascriptlet elems = document.querySelectorAll('p');

for (let elem of elems) {
  elem.addEventListener('click', function func() { // дадохме име на функцията
    console.log(this.textContent);
  });
}

Сега тази функция може да бъде откачена вътре в самата нея:

javascriptlet elems = document.querySelectorAll('p');

for (let elem of elems) {
  elem.addEventListener('click', function func() {
    console.log(this.textContent);
    this.removeEventListener('click', func); // откачаме функцията
  });
}
Задание 1

Даден е списък ul, във всеки елемент от който е записано число. Направете така, че при кликване върху която и да е li нейното число да се увеличава с единица.

Задание 2

Модифицирайте предходната задача така, че всяка li да увеличава своята стойност само при първото натискане върху нея.

Задание 3

Модифицирайте предходната задача така, че всяка li да увеличава своята стойност само ако нейната стойност е по-малка от 10.