Ngôn ngữ ECMA/JavaScript sẽ hoist (nâng) bất kỳ biến nào được khai báo với var ở đâu lên đầu hàm. Đó là vì ngôn ngữ này có function scope (phạm vi hàm) chứ không có block scope (phạm vi khối) như nhiều ngôn ngữ kiểu C.
function() {
for(var a = 0; a < 7; a++) {
var b = 100;
}
}
tương đương với
function() {
var b;
for(var a = 0; a < 7; a++) {
b = 100;
}
}
Nhưng với let,情况不同。let có lexical scoping (phạm vi từ vựng). Vì vậy, trừ khi bạn cần cùng biến đó bên ngoài vòng lặp (hoặc mỗi vòng lặp phụ thuộc vào phép toán trên biến đó ở vòng trước), tốt hơn nên khai báo trong phạm vi nơi nó được sử dụng.