Tæller med lukninger i JavaScript
Lad os omskrive den kode, vi har set på,
så den returnerede funktion hver gang
forøger værdien af variablen num
med én:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // tilføjer en
}
}
let func = test();
Det betyder, at hvert kald af funktionen func
vil udskrive en ny værdi i konsollen:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
}
}
let func = test();
func(); //udskriver 1
func(); //udskriver 2
func(); //udskriver 3
func(); //udskriver 4
func(); //udskriver 5
Det viser sig, at vi har implementeret en tæller for funktionskald
ved at bruge en lukning (mere præcist ved at bruge
variablen num fra vores funktions lukning).
Vær opmærksom på, at hvert kald af funktionen test
vil returnere en ny funktion, som
vil have sin egen lukning. Det betyder, at forskellige tællere
vil arbejde uafhængigt:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // første tæller
func1(); //udskriver 1
func1(); //udskriver 2
let func2 = test(); // anden tæller
func2(); //udskriver 1
func2(); //udskriver 2
Det viser sig, at den samme variabel num
vil have forskellige værdier for forskellige funktioner!
Det betyder, at hvis vi kalder funktionen test
to gange, så vil de funktioner, der opnås fra den,
arbejde uafhængigt, og hver af
disse funktioner vil have sin egen uafhængige
variabel num.
Implementer selvstændigt, uden at kigge på min kode, en tæller for funktionskald, der fungerer med lukninger.
Lad funktionen i lukningen gemme tallet 10.
Gør så, at hvert funktionskald
reducerer dette tal med 1 og udskriver
det reducerede tal i konsollen.
Modificer den forrige opgave, så
nedtællingen når 0, og herefter
udskriver hvert efterfølgende funktionskald en
besked i konsollen om, at nedtællingen er afsluttet.