Var versus Javascript verlaten
cos |
JavaScript |
sep |
sin
Michael Zippo
Er zijn nieuwe functies toegevoegd aan de JavaScript-taal met de release van ECMAScript6 (ES6). Een van deze kenmerken is van invloed op de manier waarop we variabelen declareren. Met de toevoeging van let
en const
waren er allerlei vragen over wanneer je elk van de variabele declaraties moest gebruiken.
In deze artikel hebben we het over elk van de opties, met betrekking tot hun definitie en gebruik in de JavaScript-omgeving.
Pre-ES6: Var
Vóór de release van ES6, het sleutelwoord dat werd gebruikt voor variabelen was declaratie van var
.
Variabelen kunnen ook opnieuw worden gedeclareerd en bijgewerkt zonder fouten
Het eerste probleem met var is duidelijk: herdeclaraties kunnen fouten in je code veroorzaken als een variabele al dezelfde naam heeft gekregen. Er kunnen onbedoelde gevolgen zijn als iets opnieuw wordt gedeclareerd en u zich niet realiseerde dat de variabelenaam al in de codebase is gebruikt. Daarnaast doen zich ook andere eigenaardigheden voor met betrekking tot de scope en tillen.
Scope
De scope vertelt ons wat variabelen zijn beschikbaar voor ons om te gebruiken - we hebben variabelen die globaal of lokaal kunnen zijn. Wat als we dezelfde variabeledeclaratie hebben, maar globaal is en de andere is lokaal?
Als onze var buiten de functie wordt gedeclareerd, is deze wereldwijd voor ons beschikbaar. Wanneer "hallo" is gedeclareerd in de functie, is het alleen beschikbaar voor de functie - met functionele of lokale scope
Als we een variabele declaratie hebben die hetzelfde is, maar het bereik is anders, verandert de var in de functie de toewijzing van de globale var niet, zelfs niet met het aanroepen van helloWorld () . Aangezien de var in de functie wordt gedeclareerd met de naam "hallo", lijkt het niet binnen het globale bereik van de alternatieve definitie te vallen.
Hoist
Wanneer een variabele in JavaScript wordt gehesen, wordt de declaratie van functies en variabelen verplaatst naar het begin van hun bereik voordat de code wordt uitgevoerd. De variabele is gedeclareerd maar niet geïnitialiseerd, dus de initiële waarde van de variabele is niet gedefinieerd.
Hier wordt "hallo" gehesen en verklaard op de top van je bereik. Dus eigenlijk interpreteert de computer de code als volgt:
De JavaScript-engine ziet dat hallo bestaat, maar weet niet hoe hallo wordt gedefinieerd tot de volgende stap.
Uiteindelijk de ontwikkelaars die hebben geholpen bij het maken van de ECMAScript-standaard realiseerde zich dat er enkele kleine problemen waren met var die hen tijd en geld konden kosten. Dus besloten ze om strengere zoekwoorden te maken. Dit leidde tot de creatie van "verlof" en "kosten" in ES6
ES6:. Let
Het let
zoekwoord lijkt in veel opzichten erg op het var zoekwoord. De belangrijkste verschillen zijn de manier waarop fouten worden geretourneerd en de reikwijdte van elk zoekwoord is gedefinieerd.
Variabelen gedeclareerd en geïnitialiseerd met het trefwoord let
kunnen opnieuw worden toegewezen, maar ze kunnen niet opnieuw worden aangegeven
Wanneer u de bovenstaande code uitvoert in een JavaScript-console, retourneert de laatste regel een fout:
SyntaxError: The identifier ` hallo` is al gedeclareerd
In tegenstelling tot var
, zal het declareren van variabelen met let
geen declaratie naar hetzelfde toestaan. Variabele naam. U kunt desgewenst echter opnieuw toewijzen, zoals in het bovenstaande voorbeeld.
Scope
Champ-wise, let
lijkt erg op var
. Naast de regels die de globale of lokale scope ons geeft, is er een extra beperking met let
. Variabelen gedeclareerd in een codeblok zijn alleen beschikbaar voor dat codeblok. Dit is vergelijkbaar met het functionele bereik, omdat functies codeblokken zijn die nog verder kunnen worden uitgevoerd door afzonderlijke blokken binnen die functie te hebben.
Er zijn geen fouten in deze code omdat de twee instanties van hallo worden behandeld als afzonderlijke variabelen omdat ze verschillende reikwijdten hebben.
Hijsen
Hijsen is een ander gebied waar de declaraties let en var vergelijkbaar zijn. "Var", wanneer verhoogd, wordt geïnitialiseerd als ongedefinieerd. "leave" genereert echter een referentiefout als u het probeert te gebruiken voordat het is geïnitialiseerd.
Merk op dat het let trefwoord de beste keuze is in termen van syntaxis. Dit komt omdat er fouten worden gegenereerd wanneer u kunt proberen een variabele opnieuw te declareren of deze te gebruiken vóór het initialisatieproces.
ES6: Const
Het sleutelwoord const
heeft strengere richtlijnen dan het let
trefwoord . Met const
kunnen variabelen niet gedeclareerd of opnieuw toegewezen worden. Er wordt een TypeError gegenereerd als u probeert opnieuw toe te wijzen aan een const
.
Dat gezegd hebbende, kunnen bij het werken met objecten of arrays de eigenschappen van het object of array worden bijgewerkt. Zolang de basisstructuur van het object of de tabel niet verandert, kunt u deze altijd bijwerken.
Zoals het voorbeeld laat zien, resulteert het opnieuw toewijzen van de taak aan een nieuwe set eigenschappen in een TypeError: Assignment to constant variable.
error. Const kan niet opnieuw worden toegewezen of opnieuw worden gedeclareerd, behalve in gevallen waarin u de unieke eigenschap in een object bijwerkt