mở dev console (hoặc trong Node.js), nhập đoạn mã sau bởi chuỗi:Giới thiệu về var/const, tại sao mã này sẽ hoạt động?
a = 1
var a = 2
const a = 3
Như bạn có thể nhìn thấy nó hoạt động, nhưng nếu bạn nhập tất cả các mã cùng một lúc, bạn sẽ gặp phải lỗi, mà tôi nghĩ là hợp lý hơn
tôi đoán sự khác biệt chỉ là cẩu, nếu bạn nhập vào tất cả các mã cùng một lúc, nó sẽ được coi như:
var a
a = 1
a = 2
const a = 3
Nhưng tôi không hiểu tại sao nó hoạt động khi bạn nhập từng dòng, còn nếu bạn bỏ qua những dòng đầu tiên, bạn nhận được một lỗi như mong đợi
hành vi Thú vị! Bạn có thể phơi bày một số hành vi cụ thể của môi trường console. –
@AndyRay Tôi đã thử trong node.js và trình duyệt khác, tôi nhận được kết quả tương tự – CodinCat
Tôi có thể tưởng tượng rằng trong trường hợp đầu tiên 'var' thực sự bị bỏ qua vì đã có thuộc tính trên đối tượng chung với tên' a' (vì 'a = 1'). Bởi vì không có bất kỳ thông tin nào mà 'var a' được khai báo. Như bạn chỉ ra trong trường hợp thứ hai, 'var a' được hoisted, do đó được xử lý trước khi' a = 1' xảy ra, do đó, nó không bị bỏ qua. Nhưng đó là suy đoán, giao diện điều khiển/REPL môi trường có thể làm những điều kỳ lạ. –