JavaScript hijsen
Hijsen is het standaardgedrag van JavaScript om declaraties naar boven te verplaatsen.
JavaScript-declaraties worden gehesen
In JavaScript kan een variabele worden gedeclareerd nadat deze is gebruikt.
Met andere woorden; een variabele kan worden gebruikt voordat deze is gedeclareerd.
Voorbeeld 1 geeft hetzelfde resultaat als Voorbeeld 2 :
voorbeeld 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
Voorbeeld 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
Om dit te begrijpen, moet u de term "hijsen" begrijpen.
Hijsen is het standaardgedrag van JavaScript om alle declaraties naar de bovenkant van het huidige bereik te verplaatsen (naar de bovenkant van het huidige script of de huidige functie).
De let en const-sleutelwoorden
Variabelen gedefinieerd met let
en const
worden naar de bovenkant van het blok gehesen, maar niet geïnitialiseerd .
Betekenis: het codeblok is op de hoogte van de variabele, maar kan niet worden gebruikt totdat deze is gedeclareerd.
Het gebruik van een let
variabele voordat deze wordt gedeclareerd, resulteert in een
ReferenceError
.
De variabele bevindt zich in een "tijdelijke dode zone" vanaf het begin van het blok totdat deze wordt gedeclareerd:
Voorbeeld
Dit resulteert in eenReferenceError
:
carName = "Volvo";
let carName;
Het gebruik van een const
variabele voordat deze wordt gedeclareerd, is een syntaxisfout, dus de code zal gewoon niet worden uitgevoerd.
Voorbeeld
Deze code wordt niet uitgevoerd.
carName = "Volvo";
const carName;
Lees meer over let en const in JS Let/Const .
JavaScript-initialisaties worden niet gehesen
JavaScript hijst alleen declaraties, geen initialisaties.
Voorbeeld 1 geeft niet hetzelfde resultaat als Voorbeeld 2 :
voorbeeld 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
Voorbeeld 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
Is het logisch dat y in het laatste voorbeeld niet gedefinieerd is?
Dit komt doordat alleen de aangifte (var y), niet de initialisatie (=7) naar boven wordt gehesen.
Vanwege het hijsen is y gedeclareerd voordat het wordt gebruikt, maar omdat initialisaties niet worden gehesen, is de waarde van y niet gedefinieerd.
Voorbeeld 2 is hetzelfde als schrijven:
Voorbeeld
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
Declareer uw variabelen bovenaan!
Hijsen is (voor veel ontwikkelaars) een onbekend of over het hoofd gezien gedrag van JavaScript.
Als een ontwikkelaar het hijsen niet begrijpt, kunnen programma's bugs (fouten) bevatten.
Om fouten te voorkomen, declareert u altijd alle variabelen aan het begin van elk bereik.
Aangezien JavaScript de code op deze manier interpreteert, is het altijd een goede regel.
JavaScript in de strikte modus staat niet toe dat variabelen worden gebruikt als ze niet zijn gedeclareerd.
Bestudeer 'strikt gebruiken' in het volgende hoofdstuk.