FresherKỹ thuậtJavaScript
Sự khác nhau giữa var, let và const là gì?
Thử trả lời trước
Đáp án mẫu
Ba từ khoá này khác nhau ở phạm vi (scope), hoisting và khả năng gán lại.
varcó phạm vi theo hàm, được hoist và khởi tạo bằngundefined, và có thể khai báo lại.letcó phạm vi theo khối. Nó cũng được hoist nhưng nằm trong vùng chết tạm thời (temporal dead zone) cho đến dòng khai báo, nên đọc trước đó sẽ némReferenceError.constcó phạm vi theo khối nhưlet, nhưng không thể gán lại. Object được giữ bởiconstvẫn có thể bị thay đổi nội dung.
for (var i = 0; i < 3; i++) setTimeout(() => console.log(i))
// 3 3 3
for (let j = 0; j < 3; j++) setTimeout(() => console.log(j))
// 0 1 2
Trong code hiện đại, mặc định dùng const và chỉ dùng let khi giá trị thật sự cần đổi.
Ý chính
- var có phạm vi theo hàm; let và const có phạm vi theo khối
- let và const nằm trong temporal dead zone trước dòng khai báo
- const ngăn việc gán lại, không ngăn việc thay đổi nội dung
- Ưu tiên const mặc định, dùng let khi cần
Câu hỏi nối tiếp thường gặp
- Vì sao vòng lặp dùng var in ra 3 3 3?
- Làm sao để một object thật sự bất biến?
Lỗi thường gặp
- Nói rằng let và const hoàn toàn không được hoist
- Tin rằng const làm object và mảng bất biến