Marcin Stawowczyk · @m7rlin
2 min czytania ·
Zakres działania (scope):
var
– zmienne są widoczne w całej funkcji, w której zostały zadeklarowane (function scope), albo globalnie, jeśli zadeklarowano je poza funkcją.
let
i const
– zmienne są widoczne tylko w bloku, w którym zostały zadeklarowane (block scope), czyli np. wewnątrz {}
w pętli, instrukcji warunkowej lub funkcji.
Przypisywanie i redeklaracja:
Typ | Możliwość ponownego przypisania | Możliwość redeklaracji w tym samym scope |
---|---|---|
var | Tak | Tak |
let | Tak | Nie |
const | Nie | Nie |
var
można zarówno ponownie przypisywać, jak i deklarować w tym samym zakresie, co może prowadzić do błędów i trudnych do znalezienia bugów.
let
można przypisać nową wartość, ale nie można zadeklarować ponownie w tym samym zakresie.
const
wymaga przypisania wartości w momencie deklaracji i nie pozwala na jej zmianę ani ponowną deklarację. Wyjątek: jeśli przypiszesz do const
obiekt lub tablicę, możesz zmieniać ich zawartość, ale nie możesz przypisać nowego obiektu lub tablicy.
Hoisting (wynoszenie):
Wszystkie trzy są hoistowane, ale tylko var
jest inicjalizowany wartością undefined
. Próba użycia let
lub const
przed deklaracją skutkuje błędem.
Załączam osobny poradnik Czym jest hoisting w javascriptcie.
Nie używaj var
, chyba że musisz utrzymać stary kod lub masz bardzo specyficzny powód. Może prowadzić do nieoczekiwanych błędów przez zbyt szeroki zakres widoczności zmiennej i możliwość ponownej deklaracji.
Używaj let
, gdy wartość zmiennej ma się zmieniać w trakcie działania programu (np. licznik w pętli, tymczasowe wartości).
Używaj const
zawsze, gdy wartość nie powinna się zmieniać (np. stałe, referencje do obiektów, których nie zamierzasz podmieniać). To domyślny wybór w nowoczesnym kodzie JavaScript.
Przykłady użycia var
:
function testVar() {
if (true) {
var x = 10;
}
console.log(x); // 10 – x jest widoczne w całej funkcji
}
testVar();
var y = 5;
var y = 15; // Możliwa redeklaracja w tym samym zakresie
console.log(y); // 15
Przykłady użycia let
:
if (true) {
let a = 20;
console.log(a); // 20
}
console.log(a); // ReferenceError – a nie jest widoczne poza blokiem
let counter = 0;
counter = 1; // Można przypisać nową wartość
console.log(counter); // 1
Przykłady użycia const
:
const pi = 3.14159;
// pi = 3.14; // Błąd! Nie można przypisać nowej wartości
console.log(pi); // 3.14159
const arr = [1, 2, 3];
arr.push(4); // Dozwolone – zmieniamy zawartość tablicy, nie referencję
console.log(arr); // [1, 2, 3, 4]
// arr = [5, 6]; // Błąd! Nie można przypisać nowej tablicy
var
– unikaj, chyba że musisz; function scope, pozwala na ponowną deklarację i przypisanie.
let
– używaj, gdy wartość zmiennej ma się zmieniać; block scope, pozwala na przypisanie, nie pozwala na redeklarację.
const
– domyślny wybór; block scope, nie pozwala na przypisanie ani redeklarację, ale pozwala na modyfikację zawartości obiektów/tablic.
Najlepsza praktyka: zaczynaj od const
, zmień na let
tylko wtedy, gdy musisz zmieniać wartość zmiennej. Unikaj var
w nowym kodzie.