# Счетчик на замыканиях в 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`, а затем каждый последующий вызов функции выводил в консоль сообщение о том, что отсчет окончен.

← →
↑
en ru