Closures und sofortiger Funktionsaufruf in JavaScript
Wie Sie bereits wissen, ist es möglich, eine anonyme Funktion sofort aufzurufen und das Ergebnis ihrer Arbeit einer Variablen zuzuweisen:
let result = function() {
return '!';
}();
console.log(result); // gibt '!' aus
Oft wird die Funktion, die sofort aufgerufen wird, in solchen Fällen in runde Klammern gesetzt, obwohl dies nicht notwendig ist. Dies geschieht, um sofort erkennbar zu machen, dass die Funktion sofort aufgerufen wird:
let result = (function() {
return '!';
})();
console.log(result); // gibt '!' aus
Lassen Sie uns nun das Ergebnis der sofort aufgerufenen Funktion eine anonyme Funktion sein:
let func = (function() {
return function() {
console.log('!');
}
})();
func(); // gibt '!' aus
Lassen Sie uns dies so ändern, dass die zurückgegebene Funktion
die Variable num im Closure speichert:
let func = (function() {
let num = 1;
return function() {
console.log(num);
}
})();
Wenn man num++ hinzufügt, wird die Funktion
func zu einem fertigen Zähler:
let func = (function() {
let num = 1;
return function() {
console.log(num);
num++;
}
})();
func(); // gibt 1 aus
func(); // gibt 2 aus
func(); // gibt 3 aus
func(); // gibt 4 aus
func(); // gibt 5 aus
Ohne einen Blick in meinen Code zu werfen, implementieren Sie selbstständig einen solchen Zähler.
Modifizieren Sie die Funktionsweise des Zählers so, dass
er bis 5 zählt und dann der Countdown von vorne beginnt.