Over var, let en const in JavaScript
Vanouds declareer je een variabele in JavaScript met het keyboard var. De scope (het geldigheidsgebied) van
een variabele wordt bepaald door de plaats waar die variabele wordt gedeclareerd:
• Een variabele die wordt gedeclareerd binnen een function bestaat alleen binnen die function (lokaal).
• Een variabele die wordt gedeclareerd buiten een function bestaat binnen het hele script (globaal). Zo'n
variabele bestaat ook binnen functions in het script, tenzij binnen een function een variabele is gemaakt met dezelfde naam.
Dan geldt de lokale variabele (dus die binnen de function is gemaakt).
De bovenstaande aanpak heeft voor- en nadelen:
• Elke variabele kan worden veranderd. Constanten zijn niet mogelijk. Een als constante bedoelde variabele kan
onbedoeld worden aangepast.
• Het is mogelijk om globale variabelen te wijzigen buiten de return van een function om, dus via een side-effect.
Dat is vooral handig bij het wijzigen van variabelen met een complexe structuur (lees: arrays en objecten).
• Een bestaande variabele kan opnieuw worden gedeclareerd door een nieuwe var-opdracht.
• Als een variabele halverwege een function of script wordt gedeclareerd lijkt het alsof die aan het begin van
de function of het script is opgegeven. Dat heet "variable-lifting" en kan onbedoelde zij-effecten geven. Dit verschijnsel,
evenals het onbedoeld herdeclaren van variabelen, kan worden vermeden door variabelen consequent aan het begin van een function
of script te declareren.
In de ogen van taalpuristen kleven er alleen maar nadelen aan var, maar er wordt vergeten dat het bovenstaande inherent is aan untyped programmeertalen zoals JavaScript.
De huidige standaard bevat twee andere keywords om variabelen te declareren: let en const. Het gedrag van
met deze keywords gemaakte variabelen verschilt wezenlijk van variabelen die met var zijn gemaakt.
• De scope is op blok-nveau, dat wil zeggen: ze zijn alleen geldig tussen de accolades waar ze zijn gedeclareerd
(dus tussen { en }).
• "Variabele-lifing" is onmogelijk, omdat let en const niet kunnen worden geher-declareerd.
• Met const geef je een constante op. Na dat een const variabele een waarde heeft gekregen, kan
deze niet meer worden gewijzigd.
• Met let maak je een veranderbare variabele aan.
Wat moet je gebruiken?
let en const vraagt een iets andere benadering van een programma dan var. Je moet net even anders denken
bij het maken van de code. Het is aan te raden jezelf de denkwijze met let en const eigen te maken. Nieuwe scripts
maak je het beste met let en const. In bestaande, met var gemaakte scripts blijf je gewoon met var
werken.
var verdwijnt niet uit de standaard. Het is daarom niet nodig om met var gebouwde scripts te herschrijven.
Opmerking:
Kijkend naar de ontwikkelingen in JavaScript lijkt het alsof JavaScript steeds dichter groeit naar de taal C, die veel minder
flexibel is. Het ietwat anarchistische karakter van JavaScript, wat de kracht van JavaScript is, lijkt verloren te gaan.
Persoonlijk vind ik dat geen vooruitgang, meer een beperking van de mogelijkheden.