Callback-Funktionen
Die Tasse ist ein Absatz, #cup, und sie beginnt als blank. Auf dieser Seite gibt es keinen Kessel-Timer.
serve nimmt eine Bestellung und eine Funktion. Diese Funktion ist der Callback: du gibst sie ab, und serve ruft sie auf. Der Aufruf passiert, bevor serve zurückkehrt, also sieht die nächste Zeile das Getränk schon. Die Zeile lautet lida tea / poured.
Nicht der Kessel
Die vorige Seite loggte cold sofort und hot erst nach 400 Millisekunden. Ihre Zeile war cold / hot / 3. Ein Timer wartet. serve wartet nicht. Wer setTimeout sucht, steht am falschen Tresen.
Die Frage: wer ruft die Funktion auf, die du übergeben hast?
Der Parametername ist nur ein Name
In serve heißt der Parameter done. An der Aufrufstelle hat die Funktion keinen Namen. serve kümmert sich nicht um den Namen. Es kümmert sich darum, dass es eine Funktion bekommen hat und sie mit einem Argument aufruft: die Bestellung plus das Wort tea.
Der Aufruf kommt vor der Rückkehr
done(order + " tea") läuft, die Tasse wird gefüllt, und erst dann endet serve. Das Log unter dem Aufruf ist schon das Getränk.
function serve(order, done) {
done(order + " tea");
}
let cup = document.getElementById("cup");
serve("lida", function (drink) {
cup.textContent = drink;
});
console.log(cup.textContent);
Das Log ist lida tea. Die Tasse blieb nicht blank, und nichts hat gewartet.
Den Aufruf vergessen
Dieses serve baut das Getränk und hört auf. Es ruft done nicht auf. Die Funktion, die du übergeben hast, bleibt liegen. Die Tasse wurde vor dem Aufruf auf blank gesetzt und bleibt blank.
function serve(order, done) {
order = order + " tea";
}
let cup = document.getElementById("cup");
cup.textContent = "blank";
serve("lida", function (drink) {
cup.textContent = drink;
});
console.log(cup.textContent);
Das Log ist blank. Es wird kein Fehler geworfen. Ein Callback, der nie aufgerufen wird, läuft einfach nicht. Die Getränk-Zeichenkette wurde gebaut und niemand hat sie entgegengenommen.
Eine zweite Funktion, nach der ersten
serve kann zwei Funktionen nehmen. Es ruft zuerst done mit dem Getränk auf. after ruft es erst auf, wenn dieser Aufruf zurückgekehrt ist. after bekommt das Getränk nicht. Es markiert nur, dass eingeschenkt wurde.
function serve(order, done, after) {
done(order + " tea");
after();
}
let seen = [];
serve(
"lida",
function (drink) {
seen.push(drink);
},
function () {
seen.push("poured");
}
);
console.log(seen.join(" / "));
Das Log ist lida tea / poured. Vertauschst du die beiden Aufrufe in serve, tauschen die Wörter. Die Reihenfolge ist die der Aufrufe, nicht die, in der du die Funktionsausdrücke geschrieben hast.
Was die Seite zusammenfügt
Die Seite benutzt das zweite serve, das mit done und after. Sie schiebt das Getränk, dann poured, und schreibt die Zeile. Dazwischen liegt keine Verzögerung.
Die Zeile unter der Tasse
Das Skript steht am Ende von body. serve ruft beide Funktionen auf, bevor die Zeile gefügt wird.
<!DOCTYPE html>
<html>
<head>
<title>serve-cup — page</title>
</head>
<body>
<p id="cup">blank</p>
<p id="line">…</p>
<script>
function serve(order, done, after) {
done(order + " tea");
after();
}
let seen = [];
serve(
"lida",
function (drink) {
seen.push(drink);
},
function () {
seen.push("poured");
}
);
document.getElementById("line").textContent = seen.join(" / ");
document.getElementById("cup").textContent = seen[0];
</script>
</body>
</html>
Die Zeile lautet lida tea / poured. Die Tasse zeigt lida tea. Das Wort blank ist weg. cold / hot / 3 ist die vorige Seite.
An der Theke
- Übergib
serveeine Funktion und lass sie mit dem Getränk aufrufen. Das Log ist lida tea. - Nimm ein
serve, dasdonenie aufruft. Das Log bleibt blank. - Übergib
doneundafter. Das Log ist lida tea / poured. - Lies die Zeile der Seite: lida tea / poured.
Fehler an der Theke
Die Tasse zeigt ein Getränk oder bleibt blank. Sie zeigt keine Intervall-Zahl.
- Erwarten, dass das Log unter
servenoch blank ist, obwohldoneaufgerufen wurde - Glauben, ein Callback laufe auch, wenn
serveihn nie aufruft - 400 Millisekunden auf lida tea warten
- poured vor das Getränk setzen, indem
afterzuerst aufgerufen wird - Die Zeile als cold / hot / 3 lesen
Das behalten
- Ein Callback ist eine Funktion, die du übergibst, damit ein anderer sie aufruft
serveruftdoneauf, bevor es zurückkehrt, also sieht die nächste Zeile schon lida tea- Wird
donenie aufgerufen, bleibt die Tasse blank und es gibt keinen Fehler afterläuft erst, nachdemdonezurückgekehrt ist- Die Zeile der Seite lautet lida tea / poured
🧠 Testen Sie Ihr Wissen
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 Anweisungen
- Lesen Sie jede Frage sorgfältig
- Wählen Sie die beste Antwort für jede Frage
- Sie können das Quiz so oft wiederholen, wie Sie möchten
- Ihr Fortschritt wird oben angezeigt