# Локальная переменная счетчика в 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()();`
← →
↑
en ru