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:
let 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:
let 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:
function 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.
Përcaktoni, pa ekzekutuar kodin, çfarë do të shfaqet në konsol:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Përcaktoni, pa ekzekutuar kodin, çfarë do të shfaqet në konsol:
function 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();
Përcaktoni, pa ekzekutuar kodin, çfarë do të shfaqet në konsol:
function 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();