Кратко
Глобальный объект — это объект, в котором хранятся все глобальные переменные и функции. В браузере это window. В Node.js — global. ES2020 ввёл globalThis — универсальное имя. Переменные, объявленные через var, становятся свойствами глобального объекта.
Подробно
Что такое глобальный объект?
Глобальный объект — это объект высшего уровня, в котором живут все глобальные функции и переменные.
В браузере: window В Node.js: global ES2020+: globalThis (универсально)
Связь с var: var x = 10; console.log(window.x); // 10!
let y = 20; console.log(window.y); // undefined (let НЕ создаёт свойство на window)
Глобальные функции: function greet() {} console.log(window.greet); // функция!
Почему это плохо:
- Конфликты имён
- Случайное перезаписывание
- Тяжело отлаживать
Современные подходы:
- Модули (import/export) изолируют scope
- IIFE (Immediately Invoked Function Expression)
- const/let не засоряют global scope
Ментальная модель
Глобальный объект — как общая доска объявлений. Всё, что написано на ней, доступно всем. Но если слишком много объявлений — impossible найти нужное и легко стереть чужое.
Примеры
**Самый простой:**
console.log(typeof window); // 'object' (в браузере)
console.log(typeof globalThis); // 'object' (везде)
var globalVar = 'я глобальная';
console.log(window.globalVar); // 'я глобальная'var создаёт свойство на глобальном объекте.
**Простой:**
// let/const НЕ становятся свойствами window:
let localVar = 'я локальная';
const localConst = 'я константа';
console.log(window.localVar); // undefined
console.log(window.localConst); // undefined
// Только var:
var globalVar = 'глобальная';
console.log(window.globalVar); // 'глобальная'let/const изолированы от глобального объекта.
**Реальный пример:**
// Плохо: глобальные переменные
var API_URL = 'https://api.example.com';
var currentUser = null;
// Хорошо: модули
// app.js
const API_URL = 'https://api.example.com';
let currentUser = null;
export { API_URL, currentUser };Модули изолируют переменные. Глобальные — доступны всем.
Частые ошибки
**Неправильно:** Создавать глобальные переменные через var
**Почему:** Глобальные var засоряют пространство имён и могут быть случайно перезаписаны.
**Правильно:** Используйте модули и let/const.
**Неправильно:** Думать, что window доступен везде
**Почему:** В Node.js window не существует. Используйте globalThis.
**Правильно:** Для кросс-платформенного кода используйте globalThis.
**Неправильно:** Использовать window для хранения данных
**Почему:** Любой скрипт может изменить window. Это ненадёжно.
**Правильно:** Храните данные в модулях или передавайте через аргументы.
Важно запомнить
- Глобальный объект = window (браузер) / global (Node) / globalThis (универсал)
- var создаёт свойство на window, let/const — нет
- Глобальные переменные — источник конфликтов
- Модули (import/export) — современный способ изоляции
- Избегайте глобального scope для данных
Связь
Назад: Вы понимаете области видимости и замыкания (JI1) — теперь вы видите самую внешнюю область.
Вперёд: Следующий урок (JI3) — копирование объектов: поверхностное и глубокое.