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