Închideri și autoapelarea funcțiilor în JavaScript
După cum știți deja, puteți apela o funcție anonimă imediat și puteți atribui rezultatul unei variabile:
let result = function() {
return '!';
}();
console.log(result); // va afișa '!'
Deseori, funcția care se autoapelează este pusă între paranteze rotunde, deși acest lucru nu este obligatoriu. Acest lucru se face pentru a se vedea imediat că funcția este apelată imediat:
let result = (function() {
return '!';
})();
console.log(result); // va afișa '!'
Să presupunem acum că rezultatul funcției autoapelate este o funcție anonimă:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // va afișa '!'
Să facem astfel încât funcția returnată
să stocheze în închidere variabila num:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Dacă adăugăm num++, atunci funcția
func va deveni un contor gata făcut:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
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
Fără a privi codul meu, implementați singuri un astfel de contor.
Modificați funcționarea contorului astfel încât
acesta să numere până la 5, iar apoi numărătoarea
să înceapă de la început.