Lukkinger og umiddelbar funksjonskalling i JavaScript
Som du allerede vet, er det mulig å kalle en anonym funksjon umiddelbart og tildele resultatet av operasjonen til en variabel:
let result = function() {
return '!';
}();
console.log(result); // vil skrive ut '!'
Ofte settes funksjonen som kalles umiddelbart, i slike tilfeller inn i parenteser, selv om det ikke er nødvendig. Dette gjøres for at det umiddelbart skal være synlig at funksjonen kalles på stedet:
let result = (function() {
return '!';
})();
console.log(result); // vil skrive ut '!'
La nå resultatet av den umiddelbart kalte funksjonen være en anonym funksjon:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // vil skrive ut '!'
La oss gjøre det slik at den returnerte funksjonen
lagrer variabelen num i lukkingen:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Hvis du legger til num++, vil funksjonen
func bli en ferdig teller:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); //skriver ut 1
func(); //skriver ut 2
func(); //skriver ut 3
func(); //skriver ut 4
func(); //skriver ut 5
Uten å kikke på koden min, implementer en slik teller selvstendig.
Modifiser telleren slik at
den teller til 5, og deretter starter tellingen
på nytt.