Global tællevariabel i JavaScript

Lad os flytte variablen num uden for funktionerne, herved gøre den global:

javascriptlet num = 1; // global variabel

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

I dette tilfælde vil alle returnerede funktioner ændre denne globale variabel, og tællere vil arbejde afhængigt af hinanden:

javascriptlet num = 1;

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

let func1 = test(); // første tæller
func1();  // udskriver 1
func1();  // udskriver 2

let func2 = test(); // anden tæller
func2();  // udskriver 3
func2();  // udskriver 4

Hvorfor skabte vores foregående kode uafhængige tællere? Lad mig huske denne kode:

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

Faktum er, at variablen num er lokal inde i funktionen test. Derfor skaber hvert kald til test sin egen lokale variabel.

Derfor vil de returnerede funktioner henvise hver til deres egen lokale variabel af funktionen test. Det er sådan, uafhængighed opnås.

Hvis man derimod gør num til en global variabel - vil det også være en lukning. Det er bare, at de leksikalske miljøer for de returnerede funktioner henviser til den samme variabel num - enhver ændring af denne variabel vil være synlig i alle funktioner.

Задание 1

Bestem, uden at køre koden, hvad der udskrives i konsollen:

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

Bestem, uden at køre koden, hvad der udskrives i konsollen:

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

Bestem, uden at køre koden, hvad der udskrives i konsollen:

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