Как вы уже знаете, можно вызвать анонимную функцию на месте и присвоить результат работы какой-либо переменной:
let result = function() {
return '!';
}();
alert(result); // выведет '!'
Часто функцию, вызывающуюся на месте, в таком случае берут в круглые скобки, хотя в этом и нет нужды. Это делается для того, чтобы сразу было видно, что функция вызывается на месте:
let result = (function() {
return '!';
})();
alert(result); // выведет '!'
Пусть теперь результатом вызванной на месте функции будет анонимная функция:
let func = (function() {
return function() {
alert('!');
}
})();
func(); // выведет '!'
Давайте сделаем так, чтобы возвращаемая функция
хранила в замыкании переменную num
:
let func = (function() {
let num = 1;
return function() {
alert(num);
}
})();
Если добавить еще num++
, то функция
func
станет готовым счетчиком:
let func = (function() {
let num = 1;
return function() {
alert(num);
num++;
}
})();
func(); //выведет 1
func(); //выведет 2
func(); //выведет 3
func(); //выведет 4
func(); //выведет 5
Не подсматривая в мой код, самостоятельно реализуйте такой же счетчик.
Модифицируйте работу счетчика так, чтобы
он считал до 5
, а потом отсчет начинался
сначала.
Сравнение с предыдущим способом
Давайте сравним наш счетчик со счетчиком на замыканиях, который мы делали ранее:
function test() {
let num = 1;
return function() {
alert(num);
num++;
}
}
let func = test();
func(); //выведет 1
func(); //выведет 2
func(); //выведет 3
func(); //выведет 4
func(); //выведет 5
Как вы видите, наш новый способ проще: в
переменную сразу попадает готовый счетчик,
в отличие от старого способа, в котором у
нас появляется дополнительная функция test
.
Кроме того, в старом способе можно создать
несколько счетчиков:
function test() {
let num = 1;
return function() {
alert(num);
num++;
};
};
let func1 = test(); // первый счетчик
func1(); //выведет 1
func1(); //выведет 2
let func2 = test(); // второй счетчик
func2(); //выведет 1
func2(); //выведет 2
В новом способе получится только один уникальный счетчик. Если вам действительно нужен только один счетчик, то удобно использовать новый способ: так вы обезопасите себя от случайного создания нескольких счетчиков.