Hướng dẫn của Babel về ES6 nói:
let
là mớivar
.
Rõ ràng sự khác biệt duy nhất là var
được phân chia theo chức năng hiện tại , trong khi let
được phân chia theo khối hiện tại . Có một số ví dụ tốt trong câu trả lời này .
Tôi không thể thấy bất kỳ lý do để sử dụng var
trong mã ES6. Ngay cả khi bạn muốn phạm vi một biến đã cho cho toàn bộ hàm, bạn vẫn có thể làm như vậy bằng let
cách đặt khai báo ở đầu khối chức năng, đây là điều bạn nên làm với var
dù sao để chỉ ra phạm vi thực tế. Và nếu bạn muốn phạm vi một cái gì đó tốt hơn trong một for
khối hoặc một cái gì đó, thì bạn cũng có thể làm điều đó.
Vì vậy, bản năng của tôi là ngừng sử dụng var
hoàn toàn khi viết mã ES6.
Câu hỏi của tôi là, tôi có sai về điều này? Có trường hợp hợp pháp nào var
thích hợp hơn let
không?
let
câu lệnh ngay trên đầu của một hàm, tôi nghĩ rõ ràng là bạn có ý định phạm vi nó cho toàn bộ hàm. Tôi không nghĩ việc sử dụng var
làm cho nó rõ ràng hơn là chỉ đơn giản là đặt nó ở trên cùng.
var
vẫn còn tồn tại, là khả năng tương thích ngược. Nếu không phải như vậy, họ đã loại bỏ var
hoàn toàn, hoặc không bao giờ được giới thiệu let
ở nơi đầu tiên, thay vào đó thay đổi ngữ nghĩa của var
những gì được cho là nên có.
var
có vẻ mỏng đối với tôi, và không đủ để đảm bảo có một loại biến thứ ba nhảy xung quanh. Bạn có thể phạm vi một let
toàn bộ chức năng chỉ bằng cách đặt nó ở trên cùng của chức năng, điều này rõ ràng hơn nhiều so với việc viết var
trong một khối (để đưa nó ra khỏi khối đó để bạn có thể sử dụng nó bên ngoài khối đó - kỳ dị). Ông cảnh báo rằng nếu bạn phạm vi một let
chức năng thì "đó chỉ là vị trí báo hiệu sự khác biệt, chứ không phải cú pháp", nhưng tôi nghĩ đó là một điều tốt.
var
. các ví dụ anh trình bày để giữ var
dường như bị chiếm đoạt - và dựa trên các lỗi mã hóa nghiêm trọng . Sẽ tốt hơn nhiều khi gặp phải một lỗi và buộc phải sửa các lỗi đó hơn là sử dụng các chức năng ngôn ngữ để cho phép một người thoát khỏi nó! Điều gì tiếp theo, khuyên nên bọc mọi thứ trong một lần thử / bắt để tránh sự cố? Phần còn lại của liên kết đó là tốt nhưng tôi không đồng ý với phần cụ thể đó.
var
như một chỉ báo có ý thức rằng biến này được dự định nằm trong toàn bộ chức năng có thể là một quy ước "tự ghi lại tài liệu" hữu ích .