Без різниці. Вони обидва мають однаковий ефект (у браузері, де window
є глобальний контекст 1 ).
window.foo = "bar"
встановлює властивість foo
на window
.
foo = "bar"
позначає або друкарську помилку, або навмисно глобальну.
Оскільки мені доводиться ще раз перевіряти, чи це друкарська помилка, чи ні, я особисто вважаю, що це читабельніше встановлювати window.foo
безпосередньо.
Крім того, у суворому режимі ES5 foo = "bar"
є незаконним призначенням, оскільки foo
не задекларовано і викине a Error
.
Редагувати:
Як зазначалося в коментарях, foo = "bar"
буде шукати весь ланцюжок обсягу для змінної foo
та повторно призначити її, "bar"
якщо вона знайдена. Якщо його не знайти, він створить нову глобальну змінну.
Крім того, window.foo = "bar"
ви просто присвоюєте властивість об'єкту, який можна видалити за допомогою delete window.foo
.
У строгому режимі ES5 для змінної неприпустимоdelete
.
1 В інших середовищах, таких як node.js та Web Workers, може існувати інша назва глобального об'єкта і window
може взагалі не існувати. Використання Node.js global
та веб-працівників self
.