Přejít na hlavní obsah

Jaký je rozdíl var od let v JavaScriptu

  • Felix Kopecký
  • Postupy

V JavaScriptu existují dvě klíčová slova pro oznámení proměnných: var a let. A i když se na první pohled mohou zdát podobné, ve skutečnosti mají několik důležitých rozdílů. Pochopení těchto rozdílů pomůže vývojářům správně používat tato klíčová slova a vyhnout se chybám.

Klíčové slovo var bylo zavedeno v prvních verzích JavaScriptu a je stále široce používáno. Při použití var se proměnná vytvoří uvnitř funkce, nebo pokud je deklarována mimo funkci, stane se globální proměnnou. To znamená, že proměnná var je viditelná v celé funkci nebo v globální oblasti viditelnosti. Neomezuje se však pouze na blok kódu nebo lexikální oblast viditelnosti, což může vést k nežádoucím účinkům při použití cyklů nebo podmíněných příkazů.

Na rozdíl od var byl let přidán do standardu ECMAScript 2015 (ES6) a nabízí předvídatelnější a bezpečnější model proměnných. Proměnné deklarované pomocí let jsou omezeny na blok kódu, ve kterém jsou definovány, nebo lexikální oblast viditelnosti. To znamená, že nejsou viditelné mimo tento blok kódu nebo funkce. Tento přístup pomáhá vyhnout se konfliktům a chybám spojeným s implicitní globální viditelností.

Oznámení proměnných v JavaScriptu

V jazyce JavaScript lze k vyhlášení proměnných použít dvě klíčová slova: var a let .

  • Klíčové slovo var se používá k oznámení proměnných v globální nebo funkční oblasti viditelnosti. Když je proměnná oznámena pomocí var, bude viditelná uvnitř bloku, ve kterém je deklarována, stejně jako mimo ni. Pokud je však proměnná deklarována uvnitř funkce, bude viditelná pouze uvnitř této funkce.
  • Klíčové slovo let se používá k oznámení proměnných v oblasti blokové viditelnosti. Když je proměnná oznámena pomocí let, bude viditelná pouze uvnitř bloku, ve kterém je deklarována. To znamená, že proměnná deklarovaná pomocí let nebude k dispozici mimo blok, ve kterém se nachází.

Oznámení proměnných v JavaScriptu může vypadat následovně:

  • var x = 10; - vyhlášení proměnné x a přiřazení hodnoty 10 .
  • let y = "Hello"; - oznámení proměnné y a přiřazení hodnoty "Hello" .

Při oznamování proměnných v JavaScriptu lze také použít příkazy const (pro oznámení trvalých proměnných) a import (pro import proměnných z jiného modulu).

Použití klíčového slova var

Ve starších verzích JavaScriptu bylo pro oznámení proměnných použito Klíčové slovo var. Umožňovalo vytvářet proměnné s oblastí viditelnosti, omezenou funkcí nebo globálním kontextem.

Při použití klíčového slova var oznámená proměnná bude k dispozici uvnitř celé funkce nebo v globálním kontextu, podle toho, kde byla oznámena.

Pokud je proměnná deklarována vně funkce pomocí klíčového slova var, bude k dispozici odkudkoli uvnitř skriptu. To může být pohodlné, ale může také vést ke konfliktům a přepsání proměnné z různých částí skriptu.

Také, proměnné deklarované pomocí klíčového slova var,, stoupají nahoru aktuální oblasti viditelnosti. To znamená použít proměnnou před jejím skutečným oznámením, což může způsobit zmatek v kódu.

Ne vždy však proměnné deklarované pomocí klíčového slova var, jsou omezeny na oblast viditelnosti funkce. Pokud je proměnná deklarována uvnitř bloku kódu (jako if nebo for), bude k dispozici uvnitř celého bloku a lze ji přepsat.

Použití klíčového slova var doporučuje se pouze ve starém kódu nebo v případech, kdy je nutné vytvořit globální proměnnou.

Použití klíčového slova let

Když je proměnná oznámena pomocí let, je k dispozici pouze v rámci bloku, ve kterém byla oznámena. Tím se vyhnete možnosti přepsat hodnotu proměnné z vnější oblasti viditelnosti. Také bloky if, for a další bloky kódu lze použít ke zpracování proměnných s klíčovým slovem let.

Navíc proměnná deklarovaná pomocí let bude vytvořena pouze po oznámení v kódu (oblast viditelnosti). Před oznámením bude přístup k proměnné vyvolávat chybu ReferenceError.

Klíčové slovo let je výhodnější ve srovnání s var pro oznámení proměnných v jazyce JavaScript, protože pomáhá vyhnout se některým chybám souvisejícím s oblastí viditelnosti a interakcí proměnných.

Místní viditelnost proměnných

Když deklarujeme proměnné pomocí var nebo let, mohou mít místní oblast viditelnosti. To znamená, že jsou k dispozici pouze v bloku kódu, ve kterém jsou deklarovány.

V případě var je proměnná považována za funkčně deklarovanou a má oblast viditelnosti omezenou funkcí, ve které je deklarována. To znamená, že bude k dispozici v celé funkci, a to ještě před jejím oznámením.

S let můžeme vyhlásit proměnnou s blokovou oblastí viditelnosti. To znamená, že bude k dispozici pouze v bloku kódu, ve kterém je oznámena. Pokud se pokusíme oslovit proměnnou let mimo tento blok, dostaneme chybu.

Použití var nebo let nám tedy může pomoci řídit oblast viditelnosti našich proměnných a vyhnout se chybám souvisejícím s jejich používáním ve špatném kontextu.

var a funkce

Když používáme var Chcete-li deklarovat proměnnou uvnitř funkce, stává se místní proměnnou dostupnou pouze v rámci této funkce. Pokud deklarujeme proměnnou pomocí var uvnitř bloku jsou podmínky nebo cyklus, stává se také místní proměnnou a je k dispozici pouze uvnitř tohoto bloku. To může vést k neočekávaným problémům, protože proměnná deklarovaná pomocí var objeví se (hoisting) nahoru, což může vést k nesprávným výsledkům.

Na druhé straně, let oznamuje blokovou viditelnost proměnné, což znamená, že bude k dispozici pouze uvnitř bloku kódu, ve kterém byla oznámena. To zabraňuje vyskakování proměnných a pomáhá snížit možnost chyb.

V prvním příkladu proměnná x oznámeno pomocí var, takže hodnota 20 uvnitř bloku podmínky přepíše hodnotu 10 uvnitř funkce. Ve druhém příkladu pomocí let, proměnná x má blokovou viditelnost, takže hodnoty 20 a 10 jsou v různých oblastech viditelnosti a nejsou mezi sebou v konfliktu.

let a bloková oblast viditelnosti

Jedním z klíčových rozdílů mezi var a let v JavaScriptu je viditelnost proměnných. Na rozdíl od var jsou reklamy proměnných pomocí let omezeny na blok kódu , ve kterém jsou deklarovány.

To znamená, že proměnná deklarovaná pomocí let bude viditelná pouze uvnitř bloku kódu, ve kterém byla oznámena , a nebude k dispozici mimo ni.

console.log(x); // Ошибка: x не определена

V tomto příkladu je proměnná x oznámena pomocí let uvnitř bloku kódu ohraničeného závorkami. Uvnitř tohoto bloku můžeme přistupovat k proměnné a používat její hodnotu. Pokus obrátit se na proměnnou mimo blok však způsobí chybu.

Toto chování let umožňuje přesnější kontrolu oblasti viditelnosti proměnných a vyhýbání se potenciálním konfliktům a chybám.

Zvýšení proměnných (hoisting)

Zvedání proměnných je mechanismus, kdy JavaScript před provedením kódu přesune reklamy proměnných do horní části své viditelnosti.

V případě klíčového slova var, proměnné stoupají, ale jejich inicializace zůstává na místě. To znamená obrátit se na proměnnou před jejím oznámením a získat hodnotu undefined:

console.log(myVar); // undefinedvar myVar = 10;console.log(myVar); // 10

Na druhé straně, let před jejím oznámením nelze použít proměnnou. Pokus o to způsobí chybu:

console.log(myVar); // ReferenceError: myVar is not definedlet myVar = 10;console.log(myVar); // 10

Při použití let, je nutné před použitím v kódu deklarovat proměnné, což může pomoci vyhnout se chybám a nesprávné interpretaci kódu.

Zvýšení proměnných var

Proces zvedání proměnných znamená, že všechny reklamy proměnných var uvnitř funkce nebo bloku se začnou objevovat nahoru před spuštěním kódu. To znamená, že proměnné var mohou být použity před oznámením. Přitom hodnota takové proměnné bude undefinována až do okamžiku jejího skutečného oznámení.

Toto chování může vést k chybám, zvláště pokud si vývojář není vědom nárůstu proměnných a neví, že proměnná var, která byla později oznámena v kódu, bude k dispozici a bude mít hodnotu undefined v raných částech kódu.

console.log(x); // undefinedvar x = 10;console.log(x); // 10

Zvýšení proměnných var funguje také na úrovni funkce, takže proměnné var deklarované uvnitř funkce budou zvýšeny nad všemi ostatními operátory uvnitř funkce. To může vést k neočekávaným výsledkům a chybám v kódu.

Nedostatek zvedání proměnných let

Jedním z hlavních rozdílů mezi proměnnými let a var v JavaScriptu je jejich chování při provádění kódu. Pokud je proměnná deklarována pomocí klíčového slova var, bude zvýšena (hoisted) na začátek oblasti viditelnosti, což umožňuje její použití před jejím skutečným oznámením.

Proměnné let se však nezvednou a nejsou k dispozici až do okamžiku jejich oznámení. To znamená, že pokud se pokusíte použít proměnnou let před jejím oznámením, dostanete chybu ReferenceError.

console.log(x); // ReferenceError: x is not definedlet x = 5;

V tomto příkladu, pokud by byla proměnná x oznámena pomocí klíčového slova var, kód by byl stále správný a hodnota proměnné x před oznámením by byla undefined. Při použití let však kód způsobí chybu.

Při používání proměnných let je proto důležité je před použitím v kódu deklarovat.