Variabila globală a contorului în JavaScript

Scoatem variabila num în afara funcțiilor, făcând-o astfel globală:

javascriptlet num = 1; // variabilă globală

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

În acest caz, toate funcțiile returnate vor modifica această variabilă globală și contoarele vor funcționa deja dependente unele de altele:

javascriptlet num = 1;

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

let func1 = test(); // primul contor
func1();  // va afișa 1
func1();  // va afișa 2

let func2 = test(); // al doilea contor
func2();  // va afișa 3
func2();  // va afișa 4

De ce făcea codul nostru anterior contoare independente? Îmi amintesc acest cod:

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

Faptul este că variabila num este locală în interiorul funcției test. De aceea fiecare apel al funcției test generează propria sa variabilă locală.

Prin urmare, funcțiile returnate se vor referi fiecare la propria variabilă locală a funcției test. Exact asta asigură independența funcționării.

Dacă facem num o variabilă globală - aceasta va fi tot o închidere. Doar că mediile lexicale ale funcțiilor returnate se referă la aceeași variabilă num - orice modificări cu această variabilă vor fi vizibile în toate funcțiile.

Задание 1

Determinați, fără a rula codul, ce se va afișa în consolă:

javascriptlet counter = 0;
    
function test() {
  return function() {
    console.log(counter);
    counter++;
  };
}

let func = test;

let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Задание 2

Determinați, fără a rula codul, ce se va afișa în consolă:

javascriptfunction 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();
Задание 3

Determinați, fără a rula codul, ce se va afișa în consolă:

javascriptfunction 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();