Out of chỉ tò mò trí tuệ, tại sao javascript chấp nhậnJavascript: z = z || [] ném một lỗi khi không sử dụng VAR - tại sao?
var z = z || [];
để khởi z (như z có thể được xác định ban đầu)
nhưng không var, nó ném một lỗi (trong không gian toàn cầu)
z = z || [];
(nếu z trước đây chưa được xác định)
Trong không gian toàn cầu, bạn không bắt buộc phải sử dụng VAR mặc dù tôi nhận được nó có thể b e thực hành xấu.
Trước khi bạn nói điều này là bản sao của những câu hỏi như
What is the purpose of the var keyword and when to use it (or omit it)?
Note tuyên bố rằng "Nếu bạn đang ở trong phạm vi toàn cầu thì không có sự khác biệt."
Rõ ràng là không đúng 100%, ví dụ làm việc của tôi.
Đây có phải là một sự lừa đảo hoặc có logic hợp pháp không?
thêm một bản tóm tắt của câu trả lời là tôi đã học được nó:
Nhờ Tim (xem dưới đây) chìa khóa dẫn đến sự hiểu lầm của tôi đã không nhận ra điều này (cơ bản của javascript)
var z; hoàn toàn không có gì nếu z đã tồn tại
Đó là cách biểu thức này dường như có cả hai cách, nếu bạn cho rằng không đúng "var z" luôn khởi tạo.
Bắt đầu từ bên trái, "var z" chỉ cần đảm bảo z được xác định nhưng không thực sự ảnh hưởng đến bất kỳ giá trị hiện tại nào nếu nó đã tồn tại. Sau đó, bên phải, nếu z đã tồn tại, nó được sử dụng, nếu không, biến đã được khai báo (nhưng trống) vì vậy nó sẽ không được sử dụng nhưng sẽ không ném một lỗi.
Đây là một bài viết tuyệt vời về loại Phạm vi và cẩu vấn đề trong Javascript: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting
Nhiều nhờ minitech và mọi người khác đã đóng góp quá!
Theo nguyên tắc chung: sao chép thông báo lỗi thực tế thường hữu ích hơn là chỉ viết "ném lỗi". –