Lädt...

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.

Eine Funktion übergeben

javascript
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.

done nicht aufrufen

javascript
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.

done, dann after

javascript
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.

Seitendemo — die Tasse

html
<!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

  1. Übergib serve eine Funktion und lass sie mit dem Getränk aufrufen. Das Log ist lida tea.
  2. Nimm ein serve, das done nie aufruft. Das Log bleibt blank.
  3. Übergib done und after. Das Log ist lida tea / poured.
  4. 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 serve noch blank ist, obwohl done aufgerufen wurde
  • Glauben, ein Callback laufe auch, wenn serve ihn nie aufruft
  • 400 Millisekunden auf lida tea warten
  • poured vor das Getränk setzen, indem after zuerst aufgerufen wird
  • Die Zeile als cold / hot / 3 lesen

Das behalten

  • Ein Callback ist eine Funktion, die du übergibst, damit ein anderer sie aufruft
  • serve ruft done auf, bevor es zurückkehrt, also sieht die nächste Zeile schon lida tea
  • Wird done nie aufgerufen, bleibt die Tasse blank und es gibt keinen Fehler
  • after läuft erst, nachdem done zurückgekehrt ist
  • Die Zeile der Seite lautet lida tea / poured

🧠 Testen Sie Ihr Wissen

Bereit zum Start

Testen Sie Ihr Wissen

Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen

❓
6
Fragen
🎯
70%
Zum Bestehen
♾️
∞
Zeit
🔄
∞
Versuche

📝 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