Vì với window.foo
, bạn đang tìm kiếm một cách rõ ràng foo
thuộc tính của đối tượng window
không phải là trường hợp trong tùy chọn thứ hai. Trong tùy chọn thứ hai, nếu foo
không được xác định, bạn nên làm nhà phát triển có thể biết rằng nó không được xác định và nhận được cảnh báo lỗi rõ ràng hơn là thông dịch viên tự đặt nó thành undefined
(như trường hợp đầu tiên) đến bất ngờ kết quả.
Reference Error:
Đại diện một lỗi khi một biến không tồn tại được tham chiếu. Một tham chiếuError được ném khi cố gắng dereference một biến chưa được khai báo.
Hãy nhìn vào bài viết này để biết thêm:
Trích dẫn từ trên bài viết:
Một tham khảo được coi là không thể giải quyết nếu giá trị cơ bản của nó không được xác định. Do đó, tham chiếu thuộc tính không thể giải quyết được nếu giá trị trước dấu chấm không được xác định. Ví dụ sau đây sẽ ném một ReferenceError nhưng nó không phải vì TypeError đến đó trước. Điều này là do giá trị cơ sở của một thuộc tính phải chịu sự kiểm tra của CheckObjectCoercible (ECMA 5 9.10 thông qua 11.2.1) mà ném một TypeError khi cố gắng chuyển đổi kiểu Undefined thành một đối tượng.
Ví dụ:
var foo;
foo.bar; //TypeError (base value, foo, is undefined)
bar.baz; //ReferenceError (bar is unersolvable)
undefined.foo; //TypeError (base value is undefined)
Tài liệu tham khảo mà không phải là tài sản hoặc biến là theo định nghĩa không thể giải quyết và sẽ ném một ReferenceError, Vì vậy:
foo; //ReferenceError
'window.foo' không tương đương với' var foo'. –
@TimDown. bạn có thể xây dựng thêm một số chi tiết không? có lẽ trong một câu trả lời? – gdoron
@TimDown & @gdoron Được rồi, đó là một chút không đúng - ý tôi là window.foo tương đương với 'var foo' khi được khai báo trong ngữ cảnh chung. – JKing