Globaalne loenduri muutuja JavaScriptis
Viime muutuja num funktsioonidest välja,
muutes selle seeläbi globaalseks:
let num = 1; // globaalne muutuja
function test() {
return function() {
console.log(num);
num++;
};
}
Sel juhul kõik tagastatud funktsioonid muudavad seda globaalset muutujat ja loendurid töötavad üksteisest sõltuvalt:
let num = 1;
function test() {
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // esimene loendur
func1(); // väljastab 1
func1(); // väljastab 2
let func2 = test(); // teine loendur
func2(); // väljastab 3
func2(); // väljastab 4
Miks siis meie eelmine kood tegi sõltumatuid loendureid? Tuletan meelde seda koodi:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
};
Asi on selles, et muutuja num on lokaalne
funktsiooni test sees. Seetõttu iga
test väljakutse loob oma lokaalse
muutuja.
Seetõttu viitavad tagastatud funktsioonid
igaüks oma funktsiooni test lokaalsele muutujale.
Just nii saavutatakse sõltumatu töö.
Kui teha num globaalseks muutujaks
- on see samuti sulund. Lihtsalt tagastatud
funktsioonide leksikaalsed keskkonnad viitavad
samale muutujale num - kõik
muutused selle muutujaga on nähtavad
kõigis funktsioonides.
Määrake, ilma koodi käivitamata, mis väljastatakse konsooli:
let counter = 0;
function test() {
return function() {
console.log(counter);
counter++;
};
}
let func = test;
let func1 = func();
let func2 = func();
func1();
func2();
func1();
func2();
Määrake, ilma koodi käivitamata, mis väljastatakse konsooli:
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();
Määrake, ilma koodi käivitamata, mis väljastatakse konsooli:
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();