Globale tellervariabele in JavaScript

Laten we de variabele num buiten de functies plaatsen, waardoor deze globaal wordt:

javascriptlet num = 1; // globale variabele

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

In dit geval zullen alle geretourneerde functies deze globale variabele wijzigen en de tellers zullen afhankelijk van elkaar werken:

javascriptlet num = 1;

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

let func1 = test(); // eerste teller
func1();  // geeft 1 weer
func1();  // geeft 2 weer

let func2 = test(); // tweede teller
func2();  // geeft 3 weer
func2();  // geeft 4 weer

Waarom maakte onze vorige code dan onafhankelijke tellers? Laat me die code herinneren:

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

Het feit is dat de variabele num - lokaal is binnen de functie test. Daarom creëert elke aanroep van test zijn eigen lokale variabele.

Daarom zullen de geretourneerde functies elk verwijzen naar hun eigen lokale variabele van de functie test. Dit is precies hoe onafhankelijkheid wordt bereikt.

Als je num een globale variabele maakt - zal dit ook een closure zijn. Alleen verwijzen de lexicale omgevingen van de geretourneerde functies naar dezelfde variabele num - eventuele wijzigingen aan deze variabele zullen zichtbaar zijn in alle functies.

Задание 1

Bepaal, zonder de code uit te voeren, wat er in de console wordt weergegeven:

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

Bepaal, zonder de code uit te voeren, wat er in de console wordt weergegeven:

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

Bepaal, zonder de code uit te voeren, wat er in de console wordt weergegeven:

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