Closure og omgående funktionskald i JavaScript
Som du allerede ved, kan du kalde en anonym funktion omgående og tildele resultatet af kørslen til en variabel:
let result = function() {
return '!';
}();
console.log(result); // vil udskrive '!'
Ofte sættes funktionen, der kaldes omgående, i sådanne tilfælde i parenteser, selvom det ikke er nødvendigt. Dette gøres for, at det umiddelbart skal være synligt, at funktionen kaldes omgående:
let result = (function() {
return '!';
})();
console.log(result); // vil udskrive '!'
Lad nu resultatet af den omgående kaldte funktion være en anonym funktion:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // vil udskrive '!'
Lad os gøre det sådan, at den returnerede funktion
gemmer variablen num i et closure:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Hvis man tilføjer num++, så bliver funktionen
func en færdig tæller:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); //udskriver 1
func(); //udskriver 2
func(); //udskriver 3
func(); //udskriver 4
func(); //udskriver 5
Uden at kigge på min kode, skal du selv implementere en sådan tæller.
Modificer tælleren, så den
tæller til 5, og derefter starter optællingen
forfra.