Chiusure e Invocazione Immediata di Funzioni in JavaScript
Come già sapete, è possibile invocare una funzione anonima immediatamente e assegnare il risultato a una variabile:
let result = function() {
return '!';
}();
console.log(result); // visualizzerà '!'
Spesso la funzione che viene invocata immediatamente, in tali casi, viene racchiusa tra parentesi tonde, anche se non è strettamente necessario. Questo si fa per rendere immediatamente evidente che la funzione viene invocata sul posto:
let result = (function() {
return '!';
})();
console.log(result); // visualizzerà '!'
Supponiamo ora che il risultato della funzione inviocata immediatamente sia un'altra funzione anonima:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // visualizzerà '!'
Facciamo in modo che la funzione restituita
conservi nella chiusura la variabile num:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Se aggiungiamo anche num++, allora la funzione
func diventerà un contatore pronto all'uso:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); // visualizzerà 1
func(); // visualizzerà 2
func(); // visualizzerà 3
func(); // visualizzerà 4
func(); // visualizzerà 5
Senza guardare il mio codice, implementate autonomamente un contatore simile.
Modificate il funzionamento del contatore in modo che
conti fino a 5, e poi ricominci da capo.