Marcin Stawowczyk · @m7rlin
1 min czytania ·
varconsole.log(a); // undefined
var a = 5;
console.log(a); // 5W tym przypadku deklaracja var a jest hoistowana na początek zakresu, ale przypisanie wartości (= 5) następuje dopiero w miejscu, gdzie zostało zapisane w kodzie. Dlatego pierwsze console.log(a) wypisze undefined.
letconsole.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 10;Zmienne zadeklarowane przez let również są hoistowane, ale nie są inicjalizowane. Przed linią deklaracji znajdują się w tzw. "martwej strefie czasowej" (temporal dead zone). Próba użycia takiej zmiennej przed deklaracją skutkuje błędem ReferenceError.
constconsole.log(c); // ReferenceError: Cannot access 'c' before initialization
const c = 15;Dla const sytuacja jest identyczna jak dla let: zmienna jest hoistowana, ale nie można jej użyć przed deklaracją - również pojawi się ReferenceError.
var – deklaracja jest hoistowana, inicjalizacja nie; przed deklaracją zmienna ma wartość undefined.
let i const – deklaracja jest hoistowana, ale zmienna nie jest dostępna przed deklaracją (ReferenceError).
Znajomość tych różnic pozwala unikać trudnych do wykrycia błędów w kodzie JavaScript.