# Counter using closure in JavaScript

Let's rewrite our code so that the returned function increments the value of the variable `num` by one each time:

`function test() { let num = 1; return function() { console.log(num); num++; // adds one } } let func = test();`

It turns out that each call to the function `func` will output a new value to the console:

`function test() { let num = 1; return function() { console.log(num); num++; } } let func = test(); func(); //shows 1 func(); //shows 2 func(); //shows 3 func(); //shows 4 func(); //shows 5`

It turns out that we implemented the function call counter using a closure (more precisely, using the variable `num` from our function closure).

Note that each call to the function `test` will return a new function that will have its own closure. That is, different counters will work independently:

`function test() { let num = 1; return function() { console.log(num); num++; }; } let func1 = test(); // the first counter func1(); //shows 1 func1(); //shows 2 let func2 = test(); // the second counter func2(); //shows 1 func2(); //shows 2`

It turns out that the same variable `num` will have different values for different functions!

That is, if we call the function `test` twice, then the functions derived from it will work independently and each of these functions will have its own independent variable `num`.

On your own, without looking into my code, implement a function call counter that works on closures.

Let the function store the number `10` in the closure. Make it so that each function call decrements this number by `1` and prints the decremented number to the console.

Modify the previous task so that the countdown goes up to `0`, and then each subsequent function call prints a message to the console that the countdown has ended.

← →
↑
en ru