JS Intermediate

Глобальный объект

Понять, что такое глобальный объект (window/globalThis), как он связан с переменными, и почему его следует избегать.

Средний (Intermediate)
Нужно знать:Что такое JavaScript

Кратко

Глобальный объект — это объект, в котором хранятся все глобальные переменные и функции. В браузере это 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 найти нужное и легко стереть чужое.


Примеры

**Самый простой:**

javascript
console.log(typeof window); // 'object' (в браузере)
console.log(typeof globalThis); // 'object' (везде)

var globalVar = 'я глобальная';
console.log(window.globalVar); // 'я глобальная'

var создаёт свойство на глобальном объекте.

**Простой:**

javascript
// 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 изолированы от глобального объекта.

**Реальный пример:**

javascript
// Плохо: глобальные переменные
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) — копирование объектов: поверхностное и глубокое.

Материалы курса JS Intermediate — PROlab Academy.