Differiscono in tre modi: scope, comportamento dell'hoisting e riassegnazione.
js
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
Differiscono in tre modi: scope, comportamento dell'hoisting e riassegnazione.
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
var è function-scoped, sottoposto a hoisting e inizializzato a undefined, e può essere ridichiarato. Ciò causa perdite sorprendenti — evitarlo.let è block-scoped ({ }), riassegnabile, e vive nella temporal dead zone fino alla sua linea di dichiarazione (accedervi in anticipo genera un errore).const è block-scoped e non può essere riassegnato — ma nota che il binding è costante, non il valore:const user = { name: "Ann" };
user.name = "Bob"; // ✅ allowed — mutating the object, not reassigning
user = {}; // ❌ TypeError — can't rebind `user`
Per impostazione predefinita, inizia con const; passa a let solo quando devi riassegnare; non usare mai var nel nuovo codice. Questo chiarisce l'intento ("questo non cambierà") e evita le perdite di scope e la confusione dell'hoisting che var porta.