Variabila globală a contorului în JavaScript
Scoatem variabila num în afara funcțiilor,
făcând-o astfel globală:
let num = 1; // variabilă globală
function test() {
return function() {
console.log(num);
num++;
};
}
În acest caz, toate funcțiile returnate vor modifica această variabilă globală și contoarele vor funcționa deja dependente unele de altele:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // primul contor
func1(); // va afișa 1
func1(); // va afișa 2
let func2 = test(); // al doilea contor
func2(); // va afișa 3
func2(); // va afișa 4
De ce făcea codul nostru anterior contoare independente? Îmi amintesc acest cod:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Faptul este că variabila num este locală
în interiorul funcției test. De aceea fiecare
apel al funcției test generează propria sa variabilă
locală.
Prin urmare, funcțiile returnate se vor referi
fiecare la propria variabilă locală a funcției
test. Exact asta asigură independența
funcționării.
Dacă facem num o variabilă globală
- aceasta va fi tot o închidere. Doar că mediile
lexicale ale funcțiilor returnate se referă
la aceeași variabilă num - orice
modificări cu această variabilă vor fi vizibile
în toate funcțiile.
Determinați, fără a rula codul, ce se va afișa în consolă:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Determinați, fără a rula codul, ce se va afișa în consolă:
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();
Determinați, fără a rula codul, ce se va afișa în consolă:
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();