Sie sind hier 485
Anonyme Funktionen, Geltungsbereiche und Closures
Funktionen verschachteln
Es ist vollkommen in Ordnung, eine Funktion innerhalb einer anderen zu definieren. Das heißt, Sie können
eine Funktionsdeklaration auch in einer Funktion verschachteln. Aber wie geht das? Die kurze Antwort lautet:
Der einzige Unterschied zwischen einer auf der obersten Codeebene definierten Funktion und einer, die
innerhalb einer anderen Funktion definiert wurde, liegt im Geltungsbereich. Anders gesagt: Wenn Sie eine
Funktion in einer anderen platzieren, wirkt sich das darauf aus, wo die Funktion in Ihrem Code sichtbar ist.
Um das besser zu verstehen, wollen wir das Beispiel von eben etwas erweitern, indem wir ein paar
verschachtelte Funktionsdeklarationen und -ausdrücke hinzufügen.
var migrating = true;
var fly = function(num) {
var sound = "Ich fliege!";
function wingFlapper() {
console.log(sound);
}
for (var i = 0; i < num; i++) {
wingFlapper();
}
};
function quack(num) {
var sound = "Quak";
var quacker = function() {
console.log(sound);
};
for (var i = 0; i < num; i++) {
quacker();
}
}
if (migrating) {
quack(4);
fly(4);
}
Diesen Code haben wir wieder ans Ende
verschoben, damit wir beim Aufruf von
fly keinen Fehler mehr erhalten.
Hier fügen wir innerhalb des
Funktionsausdrucks für fly eine
Funktionsdeklaration mit dem
Namen wingFlapper hinzu.
Nun fügen wir einen
Funktionsausdruck hinzu, der
innerhalb der Funktionsdeklaration
für quack der Variablen quacker
zugewiesen wurde.
Und hier rufen wir sie auf.
Und hier rufen wir sie auf.
Nehmen Sie einen Bleistift und markieren Sie, in welchem Geltungsbereich sich
die Funktionen fly, quack, wingFlapper und quacker befinden. Markieren Sie
auch die Stellen, an denen sich die Funktionen Ihrer Meinung nach im richtigen
Geltungsbereich befinden, aber noch nicht definiert sind.
Übung

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.