Contatore con chiusure in JavaScript
Riscriviamo il codice che abbiamo esaminato
in modo che la funzione restituita aumenti
il valore della variabile num
di uno ogni volta:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // aggiungiamo uno
}
}
let func = test();
Risulterà che ogni chiamata della funzione func
stamperà in console un nuovo valore:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); // stamperà 1
func(); // stamperà 2
func(); // stamperà 3
func(); // stamperà 4
func(); // stamperà 5
Risulta che abbiamo implementato un contatore di chiamate
di funzione, utilizzando una chiusura (più precisamente utilizzando
la variabile num dalla chiusura della nostra funzione).
Tieni presente che ogni chiamata della funzione test
restituirà una nuova funzione, che avrà
la propria chiusura. Cioè diversi contatori
funzioneranno in modo indipendente:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // primo contatore
func1(); // stamperà 1
func1(); // stamperà 2
let func2 = test(); // secondo contatore
func2(); // stamperà 1
func2(); // stamperà 2
Risulta che la stessa variabile num
per funzioni diverse avrà valori diversi!
Cioè, se chiamiamo la funzione test
due volte, allora le funzioni ottenute da essa
funzioneranno in modo indipendente e ciascuna di
queste funzioni avrà la propria variabile
indipendente num.
In modo autonomo, senza guardare il mio codice, implementa un contatore di chiamate di funzione, che funzioni con le chiusure.
Lascia che la funzione in chiusura memorizzi il numero 10.
Fai in modo che ogni chiamata della funzione
riduca questo numero di 1 e stampi
in console il numero ridotto.
Modifica il problema precedente in modo che
il conteggio arrivi a 0, e poi ogni
chiamata successiva della funzione stampi in console
un messaggio che il conteggio è terminato.