JavaScript Hoisting

Hoisting is het standaardgedrag van JavaScript om verklaringen naar de top te verplaatsen.

JavaScript-verklaringen worden opgehaald

In JavaScript kun je een variabele declareren voordat je deze gebruikt.

In andere woorden, je kunt het gebruiken voordat je het hebt verklaard.

Voorbeeld 1 metVoorbeeld 2 het resultaat is hetzelfde:

Voorbeeld 1

x = 5; // 5 toekennen aan x
elem = document.getElementById("demo"); // Zoek element
elem.innerHTML = x;                     // Toon x in het element
var x; // Verklaren x

Probeer het zelf uit

Voorbeeld 2

var x; // Verklaren x
x = 5; // 5 toekennen aan x
elem = document.getElementById("demo"); // Zoek element
elem.innerHTML = x;                     // Toon x in het element

Probeer het zelf uit

Om dit te begrijpen, moet je het begrip 'hoisting' begrijpen.

Hoisting is het standaardgedrag van JavaScript om alle verklaringen naar de top van de huidige scope te verplaatsen (naar de top van het huidige script of de huidige functie).

de let- en const-sleutels

met let of const De variabelen en constants die zijn verklaard, worden niet opgehaald!

Raadpleeg JS Let / Const Lees meer over let en const in de documentatie.

Initialisaties van JavaScript worden niet opgehaald

JavaScript haalt alleen verklaringen op, niet initialisaties.

Voorbeeld 1 metVoorbeeld 2 het resultaat is verschillend:

Voorbeeld 1

var x = 5; // Initialiseer x
var y = 7; // Initialisatie van y
elem = document.getElementById("demo"); // Zoek element
elem.innerHTML = x + " " + y;           // Toon x en y

Probeer het zelf uit

Voorbeeld 2

var x = 5; // Initialiseer x
elem = document.getElementById("demo"); // Zoek element
elem.innerHTML = x + " " + y;           // Toon x en y
var y = 7; // Initialisatie van y 

Probeer het zelf uit

Is het logisch dat y in het laatste voorbeeld nog steeds ongedefinieerd is?

Dit komt omdat alleen de verklaring (var y) en niet de initialisatie (=7) naar boven zijn gehesen.

Vanwege hoisting is y al voor gebruik gedeclareerd, maar omdat de initialisatie niet is opgehoogd, blijft de waarde van y ongedefinieerd.

Voorbeeld 2 is ook hetzelfde:

Voorbeeld

var x = 5; // Initialiseer x
var y;     // Declareer y
elem = document.getElementById("demo"); // Zoek element
elem.innerHTML = x + " " + y;           // Toon x en y
y = 7;    // Geef 7 toe aan y

Probeer het zelf uit

宣明您的变量在顶部!

Hoisting (voor veel ontwikkelaars) is een onbekend of genegeerd gedrag van JavaScript.

Als ontwikkelaars het concept hoisting niet begrijpen, kan het programma bugs bevatten (fouten).

Om bugs te vermijden, verklaren alle variabelen altijd aan het begin van elke scope.

Omdat dit de manier is waarop JavaScript code interpreteert, hou deze gewoonte in stand.

Strict mode in JavaScript staat het gebruik van variabelen zonder verklaring niet toe.

Leer meer in het volgende hoofdstuk:use strict"