Sie sind hier � 501
Anonyme Funktionen, Geltungsbereiche und Closures
Closures durch Übergabe einer
Funktionsreferenz als Argument erstellen
function makeTimer(doneMessage, n) {
setTimeout(function() {
alert(doneMessage);
}, n);
}
makeTimer("Die Kekse sind fertig!", 1000);
Neben der Rückgabe einer Funktion aus einer anderen gibt es eine weitere
Möglichkeit, Closures zu erzeugen. Sie können eine Closure anlegen, sobald
Sie eine Referenz auf eine Funktion haben, die freie Variablen enthält und die
Funktion außerhalb ihres ursprünglichen Erstellungskontexts ausgeführt wird.
Noch eine Methode, eine Closure anzulegen, besteht in der Übergabe einer
Funktion an eine andere. Die übergebene Funktion wird in einem vollkommen
anderen Kontext ausgeführt als dem, in dem sie definiert wurde. Hier ein Beispiel:
Hier haben wir eine Funktion ...
... mit einer freien Variablen ...
Und diese Funktion wird
1
000 Millisekunden ab jetzt aufgerufen,
lange nachdem die Funktion makeTimer beendet wurde.
Hier übergeben wir einen Funktionsausdruck, der die freie Variable doneMessage an die
Funktion setTimeout übergibt. Wie Sie wissen, erhalten wir bei der Auswertung eines
Funktionsausdrucks eine Funktionsreferenz, die dann an setTimeout weitergereicht
wird. Die setTimeout-Methode hält an dieser Funktion fest (einer Funktion und ihre
Umgebung, d. h. einer Closure) und ruft sie 1000 Millisekunden später auf.
Und auch hier ist die an setTimeout übergebene Funktion eine Closure, weil sie ihre
eigene Umgebung mitbringt, die die freien Variable doneMessage an den String »Die
Kekse sind fertig!« bindet.
… die wir als Handler für setTimeout benutzen.
Was würde
passieren, wenn der
Code stattdessen so
aussähe?
function handler() {
alert(doneMessage);
}
function makeTimer(doneMessage, n) {
setTimeout(handler, n);
}
makeTimer("Die Kekse sind fertig!", 1000);
2
Sehen Sie sich den Code
auf Seite 412 in Kapitel 9
noch einmal an. Können Sie
Ihren Code so umbauen,
dass eine Closure benutzt
und das dritte Argument
für setTimeout nicht mehr
gebraucht wird?
Kopf-
nuss
Kopf-
nuss
Get JavaScript-Programmierung von Kopf bis Fuß now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.