Räknare med stängning i JavaScript
Låt oss skriva om koden vi såg på
så att den returnerade funktionen varje gång
ökar värdet på variabeln num
med ett:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // lägger till ett
}
}
let func = test();
Det kommer att resultera i att varje anrop till funktionen func
kommer att skriva ut ett nytt värde i konsolen:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); // skriver ut 1
func(); // skriver ut 2
func(); // skriver ut 3
func(); // skriver ut 4
func(); // skriver ut 5
Det visar sig att vi har implementerat en räknare för funktionsanrop
genom att använda stängning (mer exakt genom att använda
variabeln num från stängningen av vår funktion).
Tänk på att varje anrop till funktionen test
kommer att returnera en ny funktion, som
kommer att ha sin egen stängning. Det betyder att olika räknare
kommer att arbeta oberoende:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // första räknaren
func1(); // skriver ut 1
func1(); // skriver ut 2
let func2 = test(); // andra räknaren
func2(); // skriver ut 1
func2(); // skriver ut 2
Det visar sig att samma variabel num
kommer att ha olika värden för olika funktioner!
Det betyder att om vi anropar funktionen test
två gånger, så kommer de funktioner som erhålls från den att
fungera oberoende och var och en av
dessa funktioner kommer att ha sin egen oberoende
variabel num.
Implementera på egen hand, utan att kolla på min kod, en räknare för funktionsanrop som fungerar med stängningar.
Låt funktionen i stängningen lagra talet 10.
Gör så att varje anrop till funktionen
minskar detta tal med 1 och skriver ut
det minskade talet i konsolen.
Modifiera den föregående uppgiften så att
nedräkningen når 0, och sedan varje
efterföljande anrop till funktionen skriver ut ett
meddelande i konsolen om att nedräkningen är avslutad.