JS-Tutorial

JS-HAUS JS-Einführung JS Wohin JS-Ausgabe JS-Anweisungen JS-Syntax JS-Kommentare JS-Variablen JS Let JS Konst JS-Operatoren JS-Arithmetik JS-Aufgabe JS-Datentypen JS-Funktionen JS-Objekte JS-Ereignisse JS-Strings JS-String-Methoden Suche nach JS-Strings JS-String-Vorlagen JS-Nummern JS-Zahlenmethoden JS-Arrays JS-Array-Methoden JS-Array-Sortierung JS-Array-Iteration JS-Array-Konstante JS-Daten JS-Datumsformate JS Date Get-Methoden JS-Datumssatzmethoden JS Math JS Zufällig JS Boolesche Werte JS-Vergleiche JS-Bedingungen JS-Schalter JS-Schleife für JS-Schleife für In JS-Schleife für Of JS-Schleife While JS Pause JS-Iterables JS-Sets JS-Karten JS Typeof JS-Typkonvertierung JS Bitweise JS RegExp JS-Fehler JS-Bereich JS Heben Strenger JS-Modus JS dieses Schlüsselwort JS-Pfeilfunktion JS-Klassen JS JSON JS-Debugging JS-Styleguide JS Best Practices JS-Fehler JS-Leistung JS Reservierte Wörter

JS-Versionen

JS-Versionen JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge JS-Geschichte

JS-Objekte

Objektdefinitionen Objekteigenschaften Objektmethoden Objektanzeige Objektzugriffsmethoden Objektkonstruktoren Objekt-Prototypen Objekt-Iterables Objektsätze Objektkarten Objektreferenz

JS-Funktionen

Funktionsdefinitionen Funktionsparameter Funktionsaufruf Funktionsaufruf Funktion anwenden Funktionsschließungen

JS-Klassen

Klasse Einführung Klassenvererbung Klasse statisch

JS asynchron

JS-Rückrufe JS asynchron JS verspricht JS Async/Warten

JS-HTML-DOM

DOM-Einführung DOM-Methoden DOM-Dokument DOM-Elemente DOM-HTML DOM-Formulare DOM-CSS DOM-Animationen DOM-Ereignisse DOM-Ereignis-Listener DOM-Navigation DOM-Knoten DOM-Sammlungen DOM-Knotenlisten

Stückliste des JS-Browsers

JS-Fenster JS-Bildschirm JS-Standort JS-Geschichte JS-Navigator JS-Popup-Warnung JS-Timing JS-Cookies

JS-Web-APIs

Web-API-Einführung Web Forms-API Webprotokoll-API Webspeicher-API Web Worker-API Web-Fetch-API Web-Geolocation-API

JS AJAX

AJAX-Einführung AJAX-XMLHttp AJAX-Anfrage AJAX-Antwort AJAX-XML-Datei AJAX-PHP AJAX ASP AJAX-Datenbank AJAX-Anwendungen AJAX-Beispiele

JS JSON

JSON-Einführung JSON-Syntax JSON vs. XML JSON-Datentypen JSON-Parsing JSON-Stringify JSON-Objekte JSON-Arrays JSON-Server JSON-PHP JSON-HTML JSON JSONP

JS vs. jQuery

jQuery-Selektoren jQuery-HTML jQuery-CSS jQuery-DOM

JS-Grafik

JS-Grafik JS-Leinwand JS Plotly JS Chart.js JS Google-Diagramm JS D3.js

JS-Beispiele

JS-Beispiele JS-HTML-DOM JS-HTML-Eingabe JS-HTML-Objekte JS-HTML-Ereignisse JS-Browser JS-Editor JS-Übungen JS-Quiz JS-Zertifikat

JS-Referenzen

JavaScript-Objekte HTML-DOM-Objekte


JavaScript Heben


Hoisting ist das Standardverhalten von JavaScript, um Deklarationen nach oben zu verschieben.


JavaScript-Deklarationen werden gehisst

In JavaScript kann eine Variable deklariert werden, nachdem sie verwendet wurde.

Mit anderen Worten; eine Variable kann verwendet werden, bevor sie deklariert wurde.

Beispiel 1 liefert das gleiche Ergebnis wie Beispiel 2 :

Beispiel 1

x = 5; // Assign 5 to x

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;                     // Display x in the element

var x; // Declare x

Beispiel 2

var x; // Declare x
x = 5; // Assign 5 to x

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x;                     // Display x in the element

Um das zu verstehen, muss man den Begriff „Heben“ verstehen.

Hoisting ist das Standardverhalten von JavaScript, bei dem alle Deklarationen an den Anfang des aktuellen Gültigkeitsbereichs verschoben werden (an den Anfang des aktuellen Skripts oder der aktuellen Funktion).


Die Schlüsselwörter let und const

letMit und definierte Variablen constwerden an den Anfang des Blocks gehoben, aber nicht initialisiert .

Bedeutung: Der Codeblock kennt die Variable, aber sie kann nicht verwendet werden, bis sie deklariert wurde.

Die Verwendung einer letVariablen vor ihrer Deklaration führt zu einer ReferenceError.

Die Variable befindet sich vom Beginn des Blocks bis zu ihrer Deklaration in einer "zeitlichen Totzone":

Beispiel

Dies führt zu einem ReferenceError:
carName = "Volvo";
let carName;

Die Verwendung einer constVariablen, bevor sie deklariert ist, ist ein Syntaxfehler, sodass der Code einfach nicht ausgeführt wird.

Beispiel

Dieser Code wird nicht ausgeführt.

carName = "Volvo";
const carName;

Lesen Sie mehr über let und const in JS Let / Const .



JavaScript-Initialisierungen werden nicht gehisst

JavaScript hisst nur Deklarationen, keine Initialisierungen.

Beispiel 1 liefert nicht das gleiche Ergebnis wie Beispiel 2 :

Beispiel 1

var x = 5; // Initialize x
var y = 7; // Initialize y

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

Beispiel 2

var x = 5; // Initialize x

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

var y = 7; // Initialize y

Macht es Sinn, dass y im letzten Beispiel undefiniert ist?

Dies liegt daran, dass nur die Deklaration (var y), nicht die Initialisierung (=7) nach oben gehoben wird.

Aufgrund von Hoisting wurde y deklariert, bevor es verwendet wird, aber da Initialisierungen nicht gehisst werden, ist der Wert von y undefiniert.

Beispiel 2 ist dasselbe wie das Schreiben:

Beispiel

var x = 5; // Initialize x
var y;     // Declare y

elem = document.getElementById("demo"); // Find an element
elem.innerHTML = x + " " + y;           // Display x and y

y = 7;    // Assign 7 to y

Deklarieren Sie Ihre Variablen ganz oben!

Hoisting ist (für viele Entwickler) ein unbekanntes oder übersehenes Verhalten von JavaScript.

Wenn ein Entwickler das Heben nicht versteht, können Programme Fehler (Fehler) enthalten.

Um Fehler zu vermeiden, deklarieren Sie immer alle Variablen am Anfang jedes Geltungsbereichs.

Da JavaScript den Code so interpretiert, ist dies immer eine gute Regel.

JavaScript im strikten Modus lässt die Verwendung von Variablen nicht zu, wenn sie nicht deklariert sind.
Studieren Sie „use strict“ im nächsten Kapitel.