Teller op closures in JavaScript
Laten we de door ons besproken code herschrijven
zodat de geretourneerde functie elke keer
de waarde van variabele num
met één verhoogt:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // tel er één bij op
}
}
let func = test();
Het resultaat is dat elke aanroep van functie func
een nieuwe waarde in de console zal uitvoeren:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); // geeft 1
func(); // geeft 2
func(); // geeft 3
func(); // geeft 4
func(); // geeft 5
Het blijkt dat we een functie-aanroepteller hebben geïmplementeerd,
door gebruik te maken van een closure (preciezer gezegd door gebruik te maken
van variabele num uit de closure van onze functie).
Houd er rekening mee dat elke aanroep van functie test
een nieuwe functie zal retourneren, die
zijn eigen closure zal hebben. Dat betekent dat verschillende tellers
onafhankelijk zullen werken:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // eerste teller
func1(); // geeft 1
func1(); // geeft 2
let func2 = test(); // tweede teller
func2(); // geeft 1
func2(); // geeft 2
Het blijkt dat dezelfde variabele num
voor verschillende functies een andere waarde zal hebben!
Dat betekent dat als we de functie test
twee keer aanroepen, de daaruit verkregen functies
onafhankelijk zullen werken en elk van
deze functies zijn eigen onafhankelijke
variabele num zal hebben.
Implementeer zelf, zonder in mijn code te spieken, een functie-aanroepteller die werkt op closures.
Laat de functie in de closure het getal 10 opslaan.
Zorg ervoor dat elke aanroep van de functie
dit getal met 1 vermindert en
het verminderde getal in de console uitvoert.
Pas de vorige opgave zo aan dat
de aftelling doorgaat tot 0, en daarna
elke volgende functie-aanroep een
bericht in de console uitvoert dat de aftelling is beëindigd.