Call-Stack
Ein Call-Stack ist ein Mechanismus für einen Interpreter (wie den JavaScript-Interpreter in einem Webbrowser), um seine Position in einem Skript nachzuverfolgen, das mehrere Funktionen aufruft — welche Funktion derzeit ausgeführt wird und welche Funktionen innerhalb dieser Funktion aufgerufen werden, usw.
- Wenn ein Skript eine Funktion aufruft, fügt der Interpreter sie dem Call-Stack hinzu und beginnt dann mit der Ausführung der Funktion.
 - Alle Funktionen, die von dieser Funktion aufgerufen werden, werden weiter oben im Call-Stack hinzugefügt und dort ausgeführt, wo ihre Aufrufe erreicht werden.
 - Wenn die aktuelle Funktion abgeschlossen ist, nimmt der Interpreter sie vom Stack und setzt die Ausführung an der Stelle fort, an der sie in der letzten Codeauflistung unterbrochen wurde.
 - Wenn der Stack mehr Speicherplatz einnimmt, als ihm zugewiesen wurde, wird ein "Stack-Overflow"-Fehler ausgelöst.
 
Beispiel
function greeting() {
  // [1] Some code here
  sayHi();
  // [2] Some code here
}
function sayHi() {
  return "Hi!";
}
// Invoke the `greeting` function
greeting();
// [3] Some code here
Der Call-Stack wird zu Beginn leer sein und der obige Code würde so ausgeführt werden:
- 
Ignorieren Sie alle Funktionen, bis der
greeting()Funktionsaufruf erreicht wird. - 
Fügen Sie die
greeting()Funktion zur Call-Stack-Liste hinzu, und wir haben:- greeting
 - 
Führen Sie alle Zeilen des Codes innerhalb der
greeting()Funktion aus. - 
Gehe zum
sayHi()Funktionsaufruf. - 
Fügen Sie die
sayHi()Funktion zur Call-Stack-Liste hinzu, wie:- sayHi - greeting
 - 
Führen Sie alle Zeilen des Codes innerhalb der
sayHi()Funktion aus, bis deren Ende erreicht ist. - 
Geben Sie die Ausführung an die Zeile zurück, die
sayHi()aufgerufen hat, und setzen Sie die restlichegreeting()Funktion fort. - 
Löschen Sie die
sayHi()Funktion aus unserer Call-Stack-Liste. Nun sieht der Call-Stack so aus:- greeting
 - 
Wenn alles innerhalb der
greeting()Funktion ausgeführt wurde, kehren Sie zur aufrufenden Zeile zurück, um den Rest des JS-Codes auszuführen. - 
Löschen Sie die
greeting()Funktion aus der Call-Stack-Liste. Erneut wird der Call-Stack leer. 
Zusammenfassend beginnen wir also mit einem leeren Call-Stack. Immer wenn wir eine Funktion aufrufen, wird sie automatisch dem Call-Stack hinzugefügt. Sobald die Funktion ihren gesamten Code ausgeführt hat, wird sie automatisch aus dem Call-Stack entfernt. Letztendlich ist der Stack wieder leer.
Siehe auch
- Call-Stack auf Wikipedia
 - Verwandte Glossarbegriffe: