Front end week 4: hoisting - Hoa0/project-tech GitHub Wiki
Hoisting
In de Javascript standaard zijn declaratie Hosied, dit betekent dat variabalen en functie boven de top van de scope bevinden, voordat de code wordt uitgevoerd. JavaScript laat namelijk het toe om variabelen tegelijkertijd te kunnen declareren en te initialiseren. De ideale manier voor het declareren en initialiseren van een variabele:
var a = 100;
In het eerste voorbeeld zie je dat de variabele x pas aan het einde wordt gedeclareerd en in het tweede voorbeeld wordt dit gelijk in het begin gedaan. Beide voorbeelden geven dezelfde resultaat terug (w3school, 2021).
Voorbeeld Hoisting 1:
x = 5; // x krijgt de waarde 5 toegewezen
elem = document.getElementById("demo"); // Zoekt een element
elem.innerHTML = x; // Geeft x weer in het element
var x; // x wordt gedeclareerd
// output 5
Voorbeeld Hoisting 2:
var punt ; // punt wordt gedeclareerd
punt = 5; // krijgt de waarde 5 toegewezen
elem = document.getElementById("demo"); // Zoekt een element
elem.innerHTML = punt; // Geeft punt weer in het element
// output 5
Undefined hoisted
De beste optie zou zijn om de variabele voor gebruik te declareren en te initialiseren, zodat je geen “ongedefineerd” waarde krijgt (Mabishi Wakio, 2020).
Voorbeeld 1 undefined
In het volgende voorbeeld zie je dat een variabele var hoist
wordt aangemaakt, zonder er een waarde aan meegegeven wordt. Vervolgens wordt deze variabele aangeroepen. Dit geeft als output “undefined”. Omdat er geen waarde aan meegegeven zijn en javascript leest van boven naar beneden. In het laatste regels krijgt de variabele host een waarde mee, helaas heeft de executie al plaatst gevonden.
// voorbeeld 1
var hoist;
// Output: undefined
console.log(hoist);
// JavaScript heeft de variabele declaratie gehesen en krijgt nu de waarde ongedefinieerd.
hoist = 'The variable has been hoisted.';
// voorbeeld 2: executie vindt gelijk plaatst
// Output: undefined, omdat er geen variabele declaratie heeft plaatst gevonden boven de executie code
console.log(hoist);
// JavaScript heeft de variabele declaratie gehesen en krijgt nu de waarde ongedefinieerd.
var hoist = 'The variable has been hoisted.';
let
en const
Variabelen definiëren met Wanneer je variabelen met let
of const
gaat definiëren, moet dit op het alle hoogste niveau gedaan worden van een codeblok.
Voorbeeld 1: let
Als de variabele let
niet op het hoogste niveau staat, komt er als output “RederenceError” uit. Omdat de variabele let
niet boven aan staat gedefinieerd en de waarde dat toegewezen is, staat boven aan (dit zou juist anders om moeten). (wikipedia, 2021)
carName = "Volvo";
let carName; // let moet op het hoogste niveau staan, staat momenteel op het laagste niveau
Voorbeeld 2: const
Als de variabele const
niet op het hoogste niveau staat, zal er een syntax error komen (code wordt vervolgens niet gerund).
// code zal niet runnen, omdat const niet op het hoogste niveau staat
carName = "Volvo";
const carName;
Conclusie:
Het is belangrijk voor developers om te weten wat hoisted in javascript inhoudt. Wanneer dit niet het geval is, zal je als ontwikkelaar veel fouten maken tijdens coderen/ bugs tegenkomen. Om dit te voorkomen, zal je alle variabelen op het hoogste niveau moeten definiëren (var, let, const).
Bronnen
Mabishi Wakio (2020, 21 september). Understanding Hoisting in JavaScript. Geraadpleegd van, https://www.digitalocean.com/community/tutorials/understanding-hoisting-in-javascript w3school (2021). JavaScript hoisting. Geraadpleegd van, https://www.w3schools.com/js/js_hoisting.asp