Global variabel for teller i JavaScript

La oss flytte variabelen num utenfor funksjonene, og dermed gjøre den global:

javascriptlet num = 1; // global variabel

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

I dette tilfellet vil alle de returnerte funksjonene endre denne globale variabelen og tellerne vil nå jobbe avhengig av hverandre:

javascriptlet num = 1;

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

let func1 = test(); // første teller
func1();  // skriver ut 1
func1();  // skriver ut 2

let func2 = test(); // andre teller
func2();  // skriver ut 3
func2();  // skriver ut 4

Hvorfor skilte vår forrige kode ut uavhengige tellere? La meg minne om denne koden:

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

Saken er at variabelen num er lokal inni funksjonen test. Derfor skaper hvert kall til test sin egen lokale variabel.

Derfor vil de returnerte funksjonene referere hver til sin egen lokale variabel av funksjonen test. Det er slik uavhengighet oppnås.

Hvis du derimot gjør num til en global variabel - vil dette også være en lukning. Bare de leksikalske omgivelsene til de returnerte funksjonene refererer til den samme variabelen num - alle endringer av denne variabelen vil være synlige i alle funksjoner.

Задание 1

Bestem, uten å kjøre koden, hva som vil skrives ut 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, uten å kjøre koden, hva som vil skrives ut 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, uten å kjøre koden, hva som vil skrives ut 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();