Chúng khác nhau ở ba điểm: scope, hành vi hoisting, và khả năng gán lại.
js
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
Chúng khác nhau ở ba điểm: scope, hành vi hoisting, và khả năng gán lại.
() {
() {
a = ;
b = ;
c = ;
}
.(a);
.(b);
}
var là function-scoped, được hoist và khởi tạo thành undefined, và có thể khai báo lại. Điều này gây ra những rò rỉ bất ngờ — hãy tránh dùng nó.let là block-scoped ({ }), có thể gán lại, và nằm trong temporal dead zone cho đến dòng khai báo của nó (truy cập sớm sẽ ném lỗi).const là block-scoped và không thể gán lại — nhưng lưu ý rằng binding mới là hằng số, chứ không phải giá trị:const user = { name: "Ann" };
user.name = "Bob"; // ✅ được phép — thay đổi object, không phải gán lại
user = {}; // ❌ TypeError — không thể gán lại `user`
Mặc định dùng const; chuyển sang let chỉ khi bạn buộc phải gán lại; không bao giờ dùng var trong code mới. Điều này làm rõ ý định ("giá trị này sẽ không thay đổi") và tránh được những rò rỉ scope cùng sự nhầm lẫn về hoisting mà var mang lại.