Contor cu închideri în JavaScript
Să rescriem codul pe care l-am analizat
astfel încât funcția returnată să mărească
de fiecare dată valoarea variabilei num
cu unu:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // adăugăm unu
}
}
let func = test();
Se va întâmpla ca fiecare apel al funcției func
să afișeze în consolă o nouă valoare:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //va afișa 1
func(); //va afișa 2
func(); //va afișa 3
func(); //va afișa 4
func(); //va afișa 5
Rezultă că am implementat un contor de apeluri
de funcții, folosind o închidere (mai exact folosind
variabila num din închiderea funcției noastre).
Țineți cont că fiecare apel al funcției test
va returna o nouă funcție, care va avea
propria sa închidere. Adică diferite contoare
vor funcționa independent:
function test() {
let num = 1;
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 1
func2(); //va afișa 2
Rezultă că aceeași variabilă num
pentru diferite funcții va avea valori diferite!
Adică dacă apelăm funcția test
de două ori, atunci funcțiile obținute din ea
vor funcționa independent și fiecare dintre
aceste funcții va avea propria sa variabilă
independentă num.
Singur, fără să te uiți la codul meu, implementează un contor de apeluri al funcției, care funcționează pe baza închiderilor.
Fie ca funcția în închidere să stocheze numărul 10.
Faceți ca fiecare apel al funcției
să micșoreze acest număr cu 1 și să afișeze
în consolă numărul micșorat.
Modificați problema anterioară astfel încât
numărătoarea inversă să ajungă la 0, apoi fiecare
apel ulterior al funcției să afișeze în consolă
un mesaj că numărătoarea inversă s-a încheiat.