#1 Proměnná let vs. const
O proměnných jsme psali v předchozím článku, avšak v dnešní době se používají zejména tyto dvě – let a const. Na první pohled vypadají podobně, obě ukládají jak stringy, tak čísla, pole apod., avšak je mezi nimi zásadní rozdíl. Ten z nich dělá skvělou dvojku, se kterou si ve většině času vystačíte.
#2 Rozdíly
Rozdíly těchto dvou proměnných se dělí na dvě části:
- global / block scope,
- deklaraci a přiřazení dat.
Global a block scope
Global a block scope označují dva termíny používané v programovacích jazycích. Ty vysvětlují zda deklarace proměnné bude ovlivněna v celém kódu (global) nebo pouze v dané části kódu (block).
Proměnná var má global scope, to znamená, že pokud bude deklarována mimo blok a následně přepsána v bloku, její hodnota se změní v celém dokumentu. Například takto:
var x = 100;
console.log(x);
// Výstup je 100
{ // Blok
var x = 50;
console.log(x);
// Výstup je 50
}
console.log(x);
// Výstup je 50
Proměnné let a const mají ale block scope. Znamená to, že pokud ji definujeme mimo blok a následně předefinujeme v bloku, její hodnota mimo blok bude pořád stejná a v bloku bude jiná = vnitřní hodnota (v bloku) nijak neovlivní vnější hodnotu.
let y = 100;
console.log(y);
// Výstup je 100
{ // Blok
let y = 50;
console.log(y);
// Výstup je 50
}
console.log(y);
// Výstup je 100
Díky této vlastnosti jsou obě proměnné lépe použitelné – lze je lokálně „změnit“ bez toho, aby byly změněny lokálně.
Deklarace a přiřazení dat
Proměnná let musí být deklarována, nelze ji redeklarovat a nemusí při deklaraci obsahovat hodnotu – její hodnotu lze kdykoliv měnit. To, že ji nelze redeklarovat znamená, že tento kód fungovat nebude…
let x = 100;
let x = 200;
// Hodnota se nezmění
…ale tento ano…
let x = 100;
x = 200;
// Hodnota se změní
Zároveň lze proměnnou let nejdříve deklarovat a poté jí až naplnit.
let x;
x = 100;
U proměnné const je potřeba ji také deklarovat, také ji nelze redeklarovat, ale narozdíl od let je potřeba jí okamžitě přiřadit hodnotu a tu hodnotu již nelze měnit.
const a = 100;
a = 100;
// Hodnota se nezmění
#3 Tabulka vlastností
Proměnná | Global scope | Block scope | Redeklarace | Přepsání hodnoty |
---|---|---|---|---|
var | Ano | Ne | Ano | Ne |
let | Ne | Ano | Ne | Ano |
const | Ne | Ano | Ne | Ne |