Elas diferem em três aspectos: escopo, comportamento de hoisting e reatribuição.
js
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
Elas diferem em três aspectos: escopo, comportamento de hoisting e reatribuição.
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
var é function-scoped, sofre hoisting e é inicializada como undefined, e pode ser redeclarada. Isso causa vazamentos surpreendentes — evite.let é block-scoped ({ }), reatribuível, e vive na temporal dead zone até sua linha de declaração (acessá-la antecipadamente lança um erro).const é block-scoped e não pode ser reatribuída — mas note que a vinculação é constante, não o valor:const user = { name: "Ann" };
user.name = "Bob"; // ✅ allowed — mutating the object, not reassigning
user = {}; // ❌ TypeError — can't rebind `user`
Default para const; mude para let apenas quando precisar reatribuir; nunca use var em código novo. Isso deixa a intenção clara ("isso não vai mudar") e evita os vazamentos de escopo e confusão de hoisting que var traz.