JavaScript Heben: Was Sie wissen müssen

Jan 08 2023
Wenn Sie schon seit einiger Zeit mit JavaScript arbeiten, haben Sie wahrscheinlich schon einmal den Begriff „Hebezeug“ gehört. Tatsächlich ist es für Interviewer eines der Konzepte, nach denen sie gerne fragen, weil es das Verständnis des Kandidaten für JavaScript zeigt.
Foto von Ries Bosch auf Unsplash

Wenn Sie schon seit einiger Zeit mit JavaScript arbeiten, haben Sie wahrscheinlich schon einmal den Begriff „Hebezeug“ gehört. Tatsächlich ist es für Interviewer eines der Konzepte, nach denen sie gerne fragen, weil es das Verständnis des Kandidaten für JavaScript zeigt. Aber was genau bedeutet Heben und wie wirkt es sich auf Ihren Code aus? In diesem Artikel werde ich Sie durch das führen, was Sie darüber und seine Auswirkungen auf Ihren Code wissen müssen.

Schauen wir uns zunächst die sprachliche Bedeutung dieses Begriffs an, bevor wir über seine technische Verwendung sprechen. Heben wird einfach verwendet, um sich auf das Heben oder Ziehen von etwas zu beziehen, normalerweise unter Verwendung von Seilen oder Flaschenzügen. Sie hören Aussagen wie „Sie hat sich ihren Rucksack auf die Schulter gehisst“, „Flagge hissen“, „Die Ladung wurde ins Schiff gehisst“ und so weiter. Andere Wörter für Heben sind Heben oder Hochwandern.

In Bezug auf JavaScript bezieht sich „Heben“ auf das Verhalten, bei dem der Interpreter Deklarationen für Variablen oder Funktionen vor ihrer Ausführung automatisch an die Spitze ihres enthaltenden Gültigkeitsbereichs verschiebt. Das bedeutet, dass Sie eine Variable oder Funktion noch verwenden können, bevor sie in Ihrem Code deklariert wird.

Betrachten Sie beispielsweise den folgenden Code:

Die Zeile var x = 10 enthält zwei Aktionen:

  1. Variablendeklaration „var“.
  2. Variablenzuweisung „=“.

Interessanterweise sollte beachtet werden, dass das Heben nur Deklarationen betrifft, nicht Zuweisungen oder Initialisierungen. Im obigen Beispiel ist der Wert von x undefiniert, wenn er an der Konsole protokolliert wird, da die Zuweisung zu 10 noch nicht erfolgt ist.

Protokollierung der Variablen x vor ihrer Initialisierung

Um dies besser zu verstehen, werfen wir einen Blick darauf, wie dieses Verhalten von Funktionen gezeigt wird.

Im obigen Beispiel würden Sie beobachten, dass der Code auch dann noch einwandfrei funktionierte, wenn die Funktion aufgerufen wurde, bevor sie deklariert wurde, und uns beim Protokollieren den richtigen Ausdruck lieferte. Ob die Funktion vor dem Aufruf deklariert wird oder umgekehrt, das Verhalten bleibt gleich. Der JavaScript-Interpreter hat die Funktionsdeklaration erfasst und sie vor ihrer Ausführung an den Anfang des Geltungsbereichs gestellt. Es ist, als ob der Code so aussähe:

Betrachten wir andererseits, wie das Heben mit einer anonymen Funktion oder einer einer Variablen zugewiesenen Funktion funktioniert. Ein Beispiel dafür wird im folgenden Beispiel gezeigt:

Einer Variablen eine Funktion zuweisen

Wie Sie sehen können, hat der obige Code einen Fehler erzeugt. Das Heben unterstützt keine Zuweisung, was die zuvor erwähnte Erklärung dafür ist, warum dies der Fall ist. Ein Ausdruck, der als „unmittelbar aufgerufene Funktionsausdrücke“ bekannt ist, ist ein innovativer Ansatz, um eine anonyme Funktion (kurz: IIFE) auszuführen.

Ebenso wichtig für das Hosting-Verhalten in JavaScript-Variablen sind die beiden Schlüsselwörter „let“ und „const“, die auch für Variablendeklarationen wie „var“ verwendet werden. Im Gegensatz zu ihren „var“-Gegenstücken wird der Wert einer mit „let“ oder „const“ deklarierten Variablen nicht hochgezogen. Wenn Sie versuchen, auf den Wert eines der beiden zuzugreifen, bevor er deklariert ist, erhalten Sie eine ReferenceError-Ausnahme, wie in den folgenden Bildern gezeigt.

Wie sich Heben mit „lassen“ verhalten
Wie sich das Heben mit „const“ verhält

Bei der Verwendung von Hoisting ist ein häufiger Fehler, den viele Entwickler machen, die Annahme, dass der Wert einer Variablen immer auf undefiniert initialisiert wird. Dies gilt jedoch nur für Variablen, die das Schlüsselwort „var“ in ihrer Deklaration enthalten. Jeder Versuch, auf eine mit „let“ oder „const“ deklarierte Variable zuzugreifen, bevor die Zuweisung erfolgt ist, führt zu einem ReferenceError. Moderne Best Practices für die Codierung raten dringend dazu, die Verwendung von „var“ zugunsten von „let“ und „const“ zu vermeiden, da sie einen besseren Schutz vor unbeabsichtigten oder versehentlichen Änderungen an Ihren Variablen bieten.

Zusammenfassend lässt sich sagen, dass das Heben ein wichtiges Konzept in JavaScript ist, das einen großen Einfluss auf Ihren Code haben kann. Denken Sie daran, wenn Sie Ihre Programme schreiben und debuggen, um Mehrdeutigkeiten oder unerwartetes Verhalten zu vermeiden. Es ist im Allgemeinen eine gute Praxis, alle Ihre Variablen am oberen Rand Ihres Gültigkeitsbereichs zu deklarieren. Dadurch wird Ihr Code nicht nur verständlicher, sondern auch einfacher zu warten.