Có một sự khác biệt .
var x = 1
khai báo biến x
trong phạm vi hiện tại (còn gọi là bối cảnh thực thi). Nếu khai báo xuất hiện trong một hàm - một biến cục bộ được khai báo; nếu nó trong phạm vi toàn cầu - một biến toàn cục được khai báo.
x = 1
, mặt khác, chỉ là một sự phân công tài sản. Đầu tiên nó cố gắng giải quyết x
chống lại chuỗi phạm vi. Nếu nó tìm thấy nó ở bất cứ đâu trong chuỗi phạm vi đó, nó sẽ thực hiện chuyển nhượng; nếu nó không tìm thấy x
, chỉ sau đó nó mới tạo thuộc x
tính trên một đối tượng toàn cục (là đối tượng cấp cao nhất trong chuỗi phạm vi).
Bây giờ, lưu ý rằng nó không khai báo một biến toàn cục, nó tạo ra một thuộc tính toàn cầu.
Sự khác biệt giữa hai loại này là tinh tế và có thể gây nhầm lẫn trừ khi bạn hiểu rằng khai báo biến cũng tạo ra các thuộc tính (chỉ trên Đối tượng biến) và mọi thuộc tính trong Javascript (tốt, ECMAScript) đều có các cờ nhất định mô tả các thuộc tính của chúng - ReadOnly, DontEnum và Đừng bỏ qua.
Vì khai báo biến tạo thuộc tính với cờ DontDelete, nên sự khác biệt giữa var x = 1
và x = 1
(khi được thực thi trong phạm vi toàn cầu) là khai báo biến trước đây - tạo ra thuộc tính DontDelete'able, và sau này không có. Do đó, thuộc tính được tạo thông qua việc gán ẩn này sau đó có thể bị xóa khỏi đối tượng toàn cục và đối tượng cũ - thuộc tính được tạo thông qua khai báo biến - không thể bị xóa.
Nhưng đây chỉ là lý thuyết tất nhiên, và trong thực tế thậm chí còn có nhiều sự khác biệt hơn giữa hai điều này , do các lỗi khác nhau trong việc triển khai (chẳng hạn như các lỗi từ IE).
Hy vọng tất cả có ý nghĩa :)
[Cập nhật 2010/12/16]
Trong ES5 (ECMAScript 5; phiên bản thứ 5 của ngôn ngữ được chuẩn hóa gần đây) có cái gọi là "chế độ nghiêm ngặt" - chế độ ngôn ngữ chọn tham gia, thay đổi một chút hành vi của các bài tập không được khai báo. Trong chế độ nghiêm ngặt, việc gán cho một định danh chưa được khai báo là ReferenceError . Lý do cho việc này là để bắt các nhiệm vụ tình cờ, ngăn chặn việc tạo ra các tài sản toàn cầu không mong muốn. Một số trình duyệt mới hơn đã bắt đầu hỗ trợ cho chế độ nghiêm ngặt. Xem, ví dụ, bảng compat của tôi .