JavaScript & TypeScript
2 Minuten

Hoisting in JavaScript

Okay, lass uns tief in das Konzept des Hoistings in JavaScript eintauchen. Es mag zu Beginn ein wenig verwirrend erscheinen, aber ich verspreche dir, dass ich es so klar wie möglich erklären werde.

Hoisting ist ein Verhalten in JavaScript, bei dem Variablendeklarationen und Funktionsdefinitionen an den Anfang ihres jeweiligen Scopes verschoben werden, während der Code ausgeführt wird. Das bedeutet, dass du auf Variablen und Funktionen zugreifen kannst, bevor sie im Code tatsächlich deklariert wurden. Klingt komisch, oder?

Schauen wir uns ein paar Beispiele an, um das Ganze besser zu verstehen:

console.log(myVar); // Output: undefined
var myVar = "Hello!";
console.log(myVar); // Output: Hello!

In diesem Beispiel sehen wir, dass wir myVar verwenden können, bevor wir es deklarieren. Das liegt daran, dass die Deklaration von myVar an den Anfang ihres Scope "angehoben" wurde. Also, selbst wenn wir myVar am Anfang des Codes verwenden, ist es immer noch da, wenn wir es später definieren.

Aber warte mal, das gilt auch für Funktionen!

sayHello(); // Output: Hello!

function sayHello() {
  console.log("Hello!");
}

Hier können wir sayHello() aufrufen, bevor wir die Funktion sayHello tatsächlich definieren. Das liegt daran, dass die Funktionsdefinition auch "angehoben" wird. Das ist doch ziemlich cool, oder?

Aber hier ist etwas, das du wissen solltest: Nur die Deklarationen werden "angehoben", nicht die Initialisierungen. Das bedeutet, dass der Wert einer Variable erst nach ihrer Initialisierung verfügbar ist:

console.log(myVar); // Output: undefined
var myVar = "Hello!";

Hier wird myVar zwar "angehoben", aber sein Wert bleibt undefined, bis wir ihn später tatsächlich initialisieren.

Warum ist das wichtig? Nun, Hoisting kann am Anfang verwirrend sein, aber es ist wichtig zu verstehen, wie JavaScript deinen Code interpretiert. Es hilft dir, Fehler zu vermeiden und zu verstehen, warum bestimmte Dinge in JavaScript funktionieren, wie sie es tun. Also, mach dir keine Sorgen, wenn Hoisting zuerst ein wenig seltsam erscheint. Mit der Zeit wirst du es besser verstehen und dich daran gewöhnen.

Übrigens haben auch let- und const-Variablen haben einen Hoisting-Effek, im Unterschied zu var-Variablen findet das Hoisting ohne Initialisierung statt. Daher führt der Zugriff auf sie vor der Zeile, in der sie deklariert wurden, zu einem ReferenceError: Cannot access 'variable' before initialization.