2010-03-30 31 views

Trả lời

10

window.a là tài sản của window và đó là không xác định. a là biến số và là không được khai báo.

Để sử dụng biến, trước tiên bạn phải khai báo biến này bằng cách sử dụng câu lệnh var. Vì bạn không khai báo a, thông dịch viên sẽ phát sinh lỗi. Thuộc tính đối tượng không cần thiết để khai báo rõ ràng để sử dụng chúng. Crockford viết trong Các bộ phận tốt:

If you attempt to extract a value from an object, and if the object does not have a member with that name, it returns the undefined value instead.

+1

Tuy nhiên: "window.a = 2; a" - No 'var' là cần thiết. Nó chỉ xảy ra rằng ngoại lệ được ném khi một "un-tiền tố" tìm kiếm định danh chạy ra khỏi phạm vi chuỗi để xem xét. Ngữ cảnh cuối cùng được kiểm tra là bối cảnh toàn cầu (hoặc 'cửa sổ'). Đối với hầu hết các mục đích thực tế, 'var x' trong ngữ cảnh chung là giống như 'window.x = undefined'. Xem http://jibbering.com/faq/faq_notes/closures.html và xem "Độ phân giải Mã định danh, Ngữ cảnh Thực thi và Chuỗi Phạm vi". –

+0

@pst: đó là trường hợp đặc biệt trong các trình duyệt mà tất cả các biến toàn cục là thuộc tính của 'window'. Đó là một vấn đề độc lập của JavaScript. Nếu bạn chạy 'window.a = 2; a' trong Rhino là môi trường không phải trình duyệt, bạn vẫn gặp lỗi tham chiếu. –

+0

@pst: dù sao, cảm ơn bạn đã bổ sung trong việc làm rõ câu trả lời. –

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