Счетчик на замыканиях в JavaScript
Давайте перепишем рассмотренный нами код
так, чтобы возвращаемая функция каждый раз
увеличивала значение переменной num
на единицу:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // прибавляем единицу
}
}
let func = test();
Получится, что каждый вызов функции func
будет выводить в консоль новое значение:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //выведет 1
func(); //выведет 2
func(); //выведет 3
func(); //выведет 4
func(); //выведет 5
Получается, что мы реализовали счетчик вызова
функций, используя замыкание (точнее используя
переменную num
из замыкания нашей функции).
Учтите, что каждый вызов функции test
будет возвращать новую функцию, у которой
будет свое замыкание. То есть разные счетчики
будут работать независимо:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // первый счетчик
func1(); //выведет 1
func1(); //выведет 2
let func2 = test(); // второй счетчик
func2(); //выведет 1
func2(); //выведет 2
Получается, что одна и та же переменная num
для разных функций будет иметь разное значение!
То есть если мы вызовем функцию test
два раза, то полученные из нее функции будут
работать независимым образом и каждая из
этих функций будет иметь свою независимую
переменную num
.
Самостоятельно, не подсматривая в мой код, реализуйте счетчик вызова функции, работающий на замыканиях.
Пусть функция в замыкании хранит число 10
.
Сделайте так, чтобы каждый вызов функции
уменьшал это число на 1
и выводил
в консоль уменьшенное число.
Модифицируйте предыдущую задачу так, чтобы
отсчет доходил до 0
, а затем каждый
последующий вызов функции выводил в консоль
сообщение о том, что отсчет окончен.