Różnią się one na trzy sposoby: zakresem, zachowaniem hoistingu i możliwością reasignment.
js
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
Różnią się one na trzy sposoby: zakresem, zachowaniem hoistingu i możliwością reasignment.
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
var ma zakres funkcji, jest hoistowany i inicjalizowany do undefined, i może być ponownie zadeklarowany. To powoduje zaskakujące wycieki — unikaj tego.let ma zakres bloku ({ }), jest reasignowalny i znajduje się w temporal dead zone aż do linii jego deklaracji (dostęp do niego wcześniej wyrzuca błąd).const ma zakres bloku i nie może być reasignowany — ale zwróć uwagę, że binding jest stały, a nie wartość:const user = { name: "Ann" };
user.name = "Bob"; // ✅ allowed — mutating the object, not reassigning
user = {}; // ❌ TypeError — can't rebind `user`
Zaczynaj od const; przełącz się na let tylko gdy musisz reasignować; nigdy nie używaj var w nowym kodzie. To wyjaśnia intencję ("to się nie zmieni") i unika wycieki zakresu oraz zamieszania z hoistingiem, które niesie ze sobą var.