Không thể truy cậpbiến let bên ngoài khối bao quanh gần nhất nơi nó được khai báo.
{
let foo;
}
// ReferenceError: foo is not defined
console.log(foo);
Mã mẫu ở trên hoạt động nếu chúng ta thay thế khai báo letbằng varkhai báo.
2. letkhông thể sử dụng một biến trước khi nó được khai báo . Mã mẫu bên dưới ném một ReferenceError:
{
foo = 'hello';
let foo;
console.log(foo);
}
// ReferenceError: Cannot access 'foo' before initialization
Chúng ta sẽ thấy hellotrong Bảng điều khiển nếu chúng ta sử dụng vartrong mã mẫu ở trên.
3. Không thể khai báo lại các biến với let.
// There is no problems if variables are re-declared with the same name
var foo, foo;
var bar;
var bar;
let baz;
let baz;
// Throw the following error
// SyntaxError: Identifier 'baz' has already been declared
4. Ở cấp cao nhất, cácbiến let toàn cục không được gắn với window đối tượng toàn cục.
let foo = 'hello';
window.foo; // undefined
var bar = 'world';
window.bar; // 'world'
5. Sử dụng letcó thể tránh được vấn đề với các đóng cửa varcó.
Để chứng minh vấn đề, giả sử rằng chúng ta có một danh sách các hàng. Trong mỗi hàng, chúng tôi có một nút để xóa mục liên kết trong hàng.
Chúng tôi lặp lại các mục và xử lý clicksự kiện của nút trong mỗi hàng:
for (var i = 0; i < 10; i++) {
document.getElementById(`button-\${i}`).addEventListener('click', function () {
// Remove the item
console.log(i);
});
}
6. Từ constkhóa hoạt động giống như let, ngoại trừ biến không thể thay đổi.
// Throw the following error
// SyntaxError: Missing initializer in const declaration
const a;
Bạn cũng phải xác định một giá trị cho một hằng số.
const a = 'hello';
// Throw the following error
// TypeError: Assignment to constant variable
a = 'world';
Cần lưu ý rằng việc sử dụng constkhông có nghĩa là biến là bất biến. Bạn có thể thay đổi các thuộc tính của một đối tượng: