Globalna promenljiva brojača u JavaScript-u
Iznosimo promenljivu num van funkcija,
čineći je time globalnom:
let num = 1; // globalna promenljiva
function test() {
return function() {
console.log(num);
num++;
};
}
U ovom slučaju sve vraćene funkcije će menjati ovu globalnu promenljivu i brojači će raditi zavisno jedan od drugog:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // prvi brojač
func1(); // ispisaće 1
func1(); // ispisaće 2
let func2 = test(); // drugi brojač
func2(); // ispisaće 3
func2(); // ispisaće 4
Zašto je onda naš prethodni kod pravio nezavisne brojače? Podsećam na ovaj kod:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Stvar je u tome što je promenljiva num - lokalna
unutar funkcije test. Zato svaki
poziv test stvara svoju lokalnu
promenljivu.
Stoga će vraćene funkcije referisati
svaka na svoju lokalnu promenljivu funkcije
test. Upravo se tako postiže nezavisnost
rada.
Ako se num napravi globalnom promenljivom
- to će takođe biti zatvaranje. Samo što leksička
okruženja vraćenih funkcija referišu
na istu promenljivu num - bilo kakve
promene ove promenljive videće se u
svim funkcijama.
Odredite, bez pokretanja koda, šta će se ispisati u konzolu:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Odredite, bez pokretanja koda, šta će se ispisati u konzolu:
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();
Odredite, bez pokretanja koda, šta će se ispisati u konzolu:
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();