Hoisting
# Hoisting

Mit Hoisting (engl., Hochziehen) bezeichnet man das Verhalten des JavaScript-Interpreters bei der Deklaration von Variablen und Funktionen in Funktionen.
Stößt der JavaScript-Interpreter auf eine Funktion, so überprüft er zunächst in der gesamten Funktion, welche Variablen im lokalen Gültigkeitsbereich der Funktion definiert werden und welche global definiert wurden. Werden Variablendefinitionen mit lokalem Gültigkeitsbereich gefunden, so werden diese gleich deklariert, nicht aber initialisiert. Der JavaScript-Interpreter „zieht“ also sämtliche Deklarationen von Variablen im Funktionsrumpf gleich unterhalb des Kopfes der Funktion hoch (Hoisting). Die Zuweisung findet aber erst an jenen Stellen statt, wo die Variablen definiert sind.
Der obenstehende Code wird vom JavaScript-Interpreter so ausgeführt, als wäre Untenstehendes definiert worden:
Ebenso werden die Deklaration von Funktionen nach vorne gezogen, wie das untenstehende Beispiel zeigt. Der Javascript-Interpreter schiebt die Deklaration und Implementierung(!) der Funktionsdefinition von foo ganz an den Anfang, sodass foo sogar aufgerufen werden kann! Die Deklaration von bar wird ebenso an den Anfang verschoben, nicht hingegen die Implementierung der anonymen Funktion. Daher löst bar einen Fehler aus.
Diesen Umstand kann man bei der Aufnahme von Unterfunktionen nutzen, indem man diese unterhalb der abschließenden return-Anweisung definiert.
Hoisting tritt nicht nur innerhalb von Funktionen, sondern auch im globalen Kontext auf, jedoch sollte man die globale Definition von Variablen vermeiden.