Tellermed lukking i JavaScript
La oss omskrive koden vi har sett på
så den returnerte funksjonen hver gang
øker verdien av variabelen num
med én:
function test() {
let num = 1;
return function() {
console.log(num);
num++; // legger til én
}
}
let func = test();
Det vil si at hvert kall til funksjonen func
vil skrive en ny verdi til konsollen:
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 viser seg at vi implementerte en funksjonskallteller
ved å bruke lukking (mer presist ved å bruke
variabelen num fra lukkingen til funksjonen vår).
Vær oppmerksom på at hvert kall til funksjonen test
vil returnere en ny funksjon, som
vil ha sin egen lukking. Det vil si at forskjellige tellere
vil fungere uavhengig:
function test() {
let num = 1;
return function() {
console.log(num);
num++;
};
}
let func1 = test(); // første teller
func1(); //skriver ut 1
func1(); //skriver ut 2
let func2 = test(); // andre teller
func2(); //skriver ut 1
func2(); //skriver ut 2
Det viser seg at den samme variabelen num
for forskjellige funksjoner vil ha forskjellige verdier!
Det vil si at hvis vi kaller funksjonen test
to ganger, vil funksjonene hentet fra den
fungere uavhengig og hver av
disse funksjonene vil ha sin egen uavhengige
variabel num.
Implementer selv, uten å se på koden min, en funksjonskallteller som fungerer med lukking.
La funksjonen i lukkingen lagre tallet 10.
Gjør slik at hvert funksjonskall
reduserer dette tallet med 1 og skriver
det reduserte tallet til konsollen.
Modifiser den forrige oppgaven slik at
nedtellingen når 0, og deretter hvert
påfølgende funksjonskall skriver en
melding til konsollen om at nedtellingen er avsluttet.