Tôi cho rằng điều đó let = 1giống nhưvar let = 1
Nó khai báo một biến, nhưng không giống nhau. Sự khác biệt chính ở đây là bằng cách bỏ qua một khai báo như var, lethoặc const, bạn đang khai báo biến này trên toàn cầu * (giả sử bạn không đặt biến được khai báo trước đó). Đây là những gì được gọi là toàn cầu ngầm - một mùi mã khét tiếng .
* Trong hầu hết các trường hợp, "toàn cầu" sẽ đề cập đến windowđối tượng, nhưng điều này không phải lúc nào cũng đúng. Ví dụ: Node.js có globalđối tượng không gian tên riêng tham chiếu đến mô-đun hiện tại.
Nếu vậy, không let x = 2nên dịch sang 1 x = 2và do đó là một lỗi?
Số let = 1không ghi đè chức năng gốc của letkhai báo / từ khóa. Bạn chỉ đơn thuần tạo ra một biến toàn cầu cùng tên. ( Có lẽ không cần phải nói, nhưng đừng làm điều này! )
Và bạn đã không hỏi điều này một cách cụ thể, nhưng đáng để giải quyết:
Tại sao tôi được phép làm let = 1nhưng không được var = 1?
varlà một từ khóa dành riêng .
letlà một từ khóa dành riêng trong tương lai , có nghĩa là hiện tại nó chỉ dành riêng ở chế độ nghiêm ngặt . Điều đó trong tâm trí, nếu bạn đang cố gắng viết mã chịu được thử thách của thời gian, tốt nhất không sử dụng letlàm định danh. Như MDN nêu trong bài viết được liên kết, tôi tưởng tượng nó sẽ là một từ dành riêng sớm hơn sau này.
letlà từ khóa, bạn không nên đặt tên (hoặc cố gắng đặt tên) các biến đó. Tôi ngạc nhiên khi Chrome thậm chí để (lol) bạn làm điều đó.