2016-09-08 26 views
6

Tôi đã đính kèm một gif động để minh họa hành vi kỳ lạ này. Về cơ bản, câu hỏi của tôi là giao diện điều khiển Chrome có xử lý các chế độ varlet khác nhau khi được sử dụng trong cùng một phạm vi không? Bạn sẽ nhận thấy rằng sau khi khai báo/gán một biến, nếu bạn cố nhập tên của biến đó vào bảng điều khiển, Chrome sẽ tự động hoàn thành nó cho bạn, hiển thị một danh sách thả xuống chứa những gì bạn gõ. Khi sử dụng let s, đây không phải là trường hợp. Đây có phải là lỗi, tính năng hoặc có thiếu thứ gì đó về số varlet trong JavaScript không?Bàn điều khiển Chrome: sự khác biệt giữa 'let' và 'var'?

Lưu ý: Tôi biết rằng let sống & sẽ chết trong phạm vi ngay lập tức.

enter image description here

+3

Nếu không là thành viên của nhóm phát triển Chrome, tôi sẽ nói a) họ chỉ tìm các biến phạm vi toàn cầu trong tự động hoàn thành hoặc b) không quan tâm thực hiện nó cho 'let', hoặc c) quên để thực hiện nó – baao

+3

Chỉ cần ra khỏi tò mò, làm thế nào bạn làm cho hình ảnh gif đó? –

+0

@OrkhanAlikhanov yeeeees. Đó là phần thú vị nhất của câu hỏi !!! – baao

Trả lời

9

Khi bạn sử dụng var trong bảng điều khiển, nó thực thi trong phạm vi toàn cục và thêm biến vào đối tượng window.

Khi bạn sử dụng let trong bảng điều khiển, nó thực thi trong phạm vi toàn cục, không thêm biến vào đối tượng window.

Khi bạn bắt đầu nhập, tự động hoàn tất kiểm tra đối tượng cha mẹ để các thuộc tính hoàn thành cùng với các cấu trúc ngôn ngữ khác, chẳng hạn như function, forwhile.

Khi không có nội dung trong bảng điều khiển, đối tượng gốc là window, không có thuộc tính bạn đang tìm kiếm vì let không thêm thuộc tính vào window.

Ngay sau khi bạn có một đối tượng mới để tự động hoàn tất, hành vi trả về những gì bạn mong đợi.

> let foo = {bar: 'baz'}; 
> foo.b //autocompletes bar 

Bây giờ, với tất cả những gì đã nói, không có lý do mà autocomplete cư xử như vậy. Trong nhiều trường hợp thiếu tự động hoàn thành cho các biến được xác định trong phạm vi toàn cầu thông qua let có thể được coi là một "lỗi" có giá trị "sửa chữa". Theo tôi, đó là hành vi đáng ngạc nhiên vừa phải.

1

var định nghĩa một biến trên phạm vi toàn cầu, trong khi let định nghĩa nó chỉ trong phạm vi địa phương. Nhiều khả năng, tính năng tự động hoàn tất chỉ tìm kiếm phạm vi toàn cầu cho các mục tiêu.

+0

Tất cả đều hợp lý. Nhưng bây giờ kết thúc năm 2017 và chrome không tự động hoàn thành các biến 'let' (Firefox đã làm). Bạn có biết bất kỳ thông tin nào về cách chúng ta có thể tự động hoàn thành các biến' let' trong chrome không? –

Các vấn đề liên quan