Variabla Globale e Numëruesit në JavaScript

Le ta largojmë variablën num jashtë funksioneve, duke e bërë atë në këtë mënyrë globale:

javascriptlet num = 1; // variabël globale

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

Në këtë rast, të gjitha funksionet e kthyera do ta ndryshojnë këtë variabël globale dhe numëruesit do të punojnë tashmë në varësi të njëri-tjetrit:

javascriptlet num = 1;

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

let func1 = test(); // numëruesi i parë
func1();  // do të shfaqë 1
func1();  // do të shfaqë 2

let func2 = test(); // numëruesi i dytë
func2();  // do të shfaqë 3
func2();  // do të shfaqë 4

Pse pra kodi ynë i mëparshëm bënte numërues të pavarur? Më lejoni t'ju kujtoj këtë kod:

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

Çështja është se variabla num është lokale brenda funksionit test. Prandaj çdo thirrje e test krijon variablin e saj lokal.

Prandaj, funksionet e kthyera do t'i referohen secila variablit të vet lokal të funksionit test. Pikërisht në këtë mënyrë arrihet pavarësia e funksionimit.

Nëse num bëhet variabël globale - ky do të jetë gjithashtu një mbyllje. Thjesht mjediset leksikore të funksioneve të kthyera i referohen së njëjtës variabël num - çdo ndryshim me këtë variabël do të jetë i dukshëm në të gjitha funksionet.

Задание 1

Përcaktoni, pa ekzekutuar kodin, çfarë do të shfaqet në konsol:

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

Përcaktoni, pa ekzekutuar kodin, çfarë do të shfaqet në konsol:

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

Përcaktoni, pa ekzekutuar kodin, çfarë do të shfaqet në konsol:

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