Contador com Closures em JavaScript
Vamos reescrever o código que vimos
para que a função retornada incremente
o valor da variável num
em um a cada vez:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // adiciona um
}
}
let func = test();
O resultado é que cada chamada da função func
exibirá um novo valor no console:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //exibirá 1
func(); //exibirá 2
func(); //exibirá 3
func(); //exibirá 4
func(); //exibirá 5
O resultado é que implementamos um contador de chamadas de
função, usando um closure (mais precisamente, usando
a variável num do closure da nossa função).
Observe que cada chamada da função test
retornará uma nova função, que terá
seu próprio closure. Ou seja, contadores diferentes
funcionarão de forma independente:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // primeiro contador
func1(); //exibirá 1
func1(); //exibirá 2
let func2 = test(); // segundo contador
func2(); //exibirá 1
func2(); //exibirá 2
O resultado é que a mesma variável num
terá valores diferentes para funções diferentes!
Ou seja, se chamarmos a função test
duas vezes, as funções obtidas a partir dela
funcionarão de forma independente e cada uma
dessas funções terá sua própria
variável num independente.
Por conta própria, sem olhar o meu código, implemente um contador de chamada de função que funcione com closures.
Suponha que a função em um closure armazene o número 10.
Faça com que cada chamada da função
reduza esse número em 1 e exiba
no console o número reduzido.
Modifique a tarefa anterior para que
a contagem regressiva chegue a 0 e, em seguida,
cada chamada subsequente da função exiba no console
uma mensagem informando que a contagem regressiva terminou.