Nuance global variable of counter in JavaScript

Let's take the variable num out of functions, thereby making it global:

let num = 1; // the global variable function test() { return function() { console.log(num); num++; }; };

In this case, all returned functions will change this global variable and the counters will work already depending on each other:

let num = 1; function test() { 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 3 func2(); //shows 4

Why did our previous code make independent counters? Recall this code:

function test() { let num = 1; return function() { console.log(num); num++; }; }

The point is that the variable num is local inside the function test. Therefore, each call to test generates its own local variable.

Therefore, the each of returned functions will refer to its local function variable test. This is how independence is achieved.

If we make num a global variable, this will also be a closure. It's just that the lexical environments of returned functions refer to the same variable num - any changes to this variable will be visible in all functions.

Determine what will be output to the console without running the code:

let counter = 0; function test() { return function() { console.log(counter); counter++; }; }; let func = test; let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();

Determine what will be output to the console without running the code:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test()(); let func1 = func; let func2 = func; func1(); func2(); func1(); func2();

Determine what will be output to the console without running the code:

function test() { let counter = 0; return function() { return function() { console.log(counter); counter++; }; }; } let func = test(); let func1 = func(); let func2 = func(); func1(); func2(); func1(); func2();
enru