Chỉ định trên mạng hãy cho phép một giá trị trong Javascript


8

Tôi đã chơi xung quanh trong Chrome devtools và đã thử đoạn mã sau:

let = 1;
let x = 2;

console.log(let); // 1
console.log(x); // 2

Đoạn mã trên sẽ không hoạt động nếu tôi thay thế "let" bằng "var".

Tôi cho rằng điều đó let = 1cũng giống như var let = 1. Nếu vậy, không let x = 2nên dịch sang 1 x = 2và do đó là một lỗi?


1
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 đó.
isick

Câu trả lời:


10

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.


Giải thích tuyệt vời, cảm ơn bạn rất nhiều! Tôi đã không biết các loại từ khóa khác nhau.
Raisen

5

Khả năng tương thích ngược. letlà tương đối mới, do đó nó không phải là một từ khóa dành riêng để không phá vỡ các tập lệnh cũ sử dụng nó làm tên biến. Đó là lý do tại sao bạn có thể sử dụng letnhư một tên biến và không var.

Tôi giả sử rằng let = 1 giống với var let = 1.

Không. Nó khá bằng someothername = 1và tạo ra một biến toàn cầu ngầm rất xấu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.