# Замыкания и вызов функции на месте в JavaScript

Как вы уже знаете, можно вызвать анонимную функцию на месте и присвоить результат работы какой-либо переменной:

`let result = function() { return '!'; }(); console.log(result); // выведет '!'`

Часто функцию, вызывающуюся на месте, в таком случае берут в круглые скобки, хотя в этом и нет нужды. Это делается для того, чтобы сразу было видно, что функция вызывается на месте:

`let result = (function() { return '!'; })(); console.log(result); // выведет '!'`

Пусть теперь результатом вызванной на месте функции будет анонимная функция:

`let func = (function() { return function() { console.log('!'); } })(); func(); // выведет '!'`

Давайте сделаем так, чтобы возвращаемая функция хранила в замыкании переменную `num`:

`let func = (function() { let num = 1; return function() { console.log(num); } })();`

Если добавить еще `num++`, то функция `func` станет готовым счетчиком:

`let func = (function() { let num = 1; return function() { console.log(num); num++; } })(); func(); //выведет 1 func(); //выведет 2 func(); //выведет 3 func(); //выведет 4 func(); //выведет 5`

Не подсматривая в мой код, самостоятельно реализуйте такой же счетчик.

Модифицируйте работу счетчика так, чтобы он считал до `5`, а потом отсчет начинался сначала.

←→
↑
en ru