V programovacím jazyce JavaScript existují dva způsoby, jak deklarovat proměnné – pomocí var a let. Ačkoli se na první pohled může zdát, že jde o zaměnitelné keywordy, mezi var a let existují důležité rozdíly, které je třeba znát.
Správné pochopení distinkcí mezi těmito dvěma způsoby deklarace proměnných je klíčové pro psaní kvalitního a udržovatelného JavaScriptového kódu. Nesprávné či zaměnitelné používání var a let může vést k neočekávanému chování programu, problémům se scope proměnných nebo dokonce k chybám a bugům.
V tomto článku se podíváme na základní vlastnosti a chování deklarací var a let. Ukážeme si rozsah jejich platnosti, způsob hoistingu i možnost opakované deklarace. Na základě těchto rozdílů pak vysvětlíme, kdy je vhodné použít var a kdy naopak let. Cílem je pochopit distinkce mezi těmito dvěma keywordy a naučit se je správně a efektivně využívat v JavaScriptovém kódu.
Deklarace proměnných pomocí var
Keyword var se v JavaScriptu používá pro deklaraci proměnných už od samotného vzniku jazyka. Způsobuje, že daná proměnná je deklarována globálně nebo v rámci funkce (function scope).
- Proměnné deklarované pomocí var jsou přístupné všude v rámci funkce, ve které byly deklarovány. Pokud jsou deklarovány mimo jakoukoliv funkci, jsou přístupné globálně.
- Na rozsah platnosti proměnných var nemají vliv bloky kódu ohraničené složenými závorkami { }. Proměnná existuje v rámci celé funkce.
- Proměnné var navíc podléhají hoistingu. To znamená, že jsou v rámci svého scope deklarovány na samotném začátku, ještě před samotným spuštěním kódu.
Díky těmto vlastnostem může použití var vést k neočekávaným důsledkům, proto je u moderního JavaScriptu vhodnější používat novější let. Var však stále má své opodstatněné využití.
Deklarace proměnných pomocí let
Na rozdíl od var, keyword let pro deklaraci proměnných byl do JavaScriptu přidán poměrně nedávno (ES6). Přináší modernější a flexibilnější způsob deklarace proměnných.
- Proměnné deklarované pomocí let jsou platné uvnitř bloku kódu { }, ve kterém byly deklarovány. Tento blok může být tvořen např. podmínkou if nebo cyklem for.
- Na rozdíl od var tedy let vytváří block scope pro danou proměnnou namísto function scope.
- Proměnné let navíc neundergo hoisting. To znamená, že nejsou deklarovány na začátku bloku, ale až v místě své deklarace.
- Pokud se pokusíme použít proměnnou let před její deklarací, dojde k chybě.
Díky block scope a absenci hoistingu se proměnné let chovají prediktabilněji a pomáhají psát bezpečnější JavaScript. Let je proto doporučené používat místo var.
Hlavní rozdíly mezi var a let
Na základě výše uvedeného můžeme shrnout hlavní rozdíly v chování a vlastnostech proměnných deklarovaných pomocí var a let:
- Rozsah platnosti (scope) – var deklaruje proměnné v rámci funkce (function scope), zatímco let v rámci bloku { } (block scope).
- Hoisting – proměnné var prochází hoistingem (jsou deklarovány na začátku scope), zatímco u let k hoistingu nedochází.
- Opakovaná deklarace – stejnou proměnnou var lze v rámci stejného scope deklarovat opakovaně, zatímco u let vyvolá opakování deklarace chybu.
- Doba vzniku – var existuje v rámci celého svého scope, let pouze až po své deklaraci v kódu.
- Bloková platnost – var je platný v rámci celé funkce, let jen uvnitř bloku { }, ve kterém byl deklarován.
Správné pochopení těchto hlavních rozdílů je zásadní pro efektivní využití var a let v JavaScriptu a předcházení neočekávaného chování a chyb.
Doporučené použití var a let
Na základě popsaných vlastností a rozdílů lze formulovat následující doporučení pro použití var a let v JavaScriptu:
- Pro deklaraci většiny proměnných by mělo být upřednostňováno let namísto var. Let poskytuje spolehlivější block scope proměnných.
- Keyword var má stále své opodstatnění v případě, že je požadováno hoisting proměnné nebo záměrná deklarace globální proměnné.
- Při opakované deklaraci stejné proměnné ve stejném scope volte let, var může vést k neočekávaným důsledkům.
- Nepoužívejte var mimo funkce, dochází k vytvoření nebezpečné globální proměnné.
- V rámci možností se vyhněte opakované deklaraci proměnných, může vést ke špatné čitelnosti kódu.
Dodržováním těchto jednoduchých pravidel využijete plný potenciál var i let a vyhnete se častým chybám spojeným s deklarací proměnných v JavaScriptu.
Závěr
Var a let jsou v JavaScriptu dva keywordy pro deklaraci proměnných. Přestože se na první pohled mohou zdát zaměnitelné, existují mezi nimi důležité rozdíly ve způsobu definování scope proměnných, v hoistingu a možnosti opakované deklarace.
Hlavními distinkcemi jsou block scope u let namísto function scope u var, absence hoistingu u let a možnost opakování deklarace pouze u var. Na základě těchto rozdílů je pro většinu proměnných doporučeno používat modernější let.
Var má i nadále své opodstatnění v případě, že je vyžadován hoisting nebo záměrná globální proměnná. Pokud jsou rozdíly mezi těmito dvěma keywordy pochopeny, lze je ve JavaScriptu využívat efektivně a předcházet častým chybám a neočekávanému chování.