Глобальний об'єкт
Що таке глобальний об'єкт
Глобальний об'єкт - це спеціальний об'єкт, який існує завжди, незалежно від середовища (браузер, Node.js тощо). Він представляє глобальну область, у якій перебувають усі глобальні змінні та функції.
Простіше кажучи:
Глобальний об'єкт - це «контейнер», у якому живуть усі змінні й функції, оголошені поза функціями та модулями.
Приклади глобальних об'єктів у різних середовищах
| Середовище | Глобальний об'єкт |
|---|---|
| Браузер | window або self |
| Web Worker | self |
| Node.js | global |
| Сучасний універсальний спосіб | globalThis |
Приклад: браузер
var x = 10;
console.log(window.x); // 10
console.log(this.x); // 10 (у глобальній області)Змінна x, оголошена через var, автоматично стає властивістю глобального об'єкта window.
Приклад: Node.js
var y = 5;
console.log(global.y); // undefinedУ Node.js змінні var, let, const не додаються в global, тому що Node.js використовує модульну систему (кожен файл - окремий модуль, не глобальний скрипт).
Універсальний спосіб: globalThis
ES2020 запровадив новий стандарт - globalThis, який працює однаково в усіх середовищах.
console.log(globalThis);Працює:
- у браузері →
window - у Node.js →
global - у web worker →
self
Взаємозв'язок з контекстом виконання
Коли створюється глобальний контекст виконання, рушій JS:
- створює глобальний об'єкт;
- встановлює
thisяк посилання на цей об'єкт (якщо не використовуєтьсяstrict mode); - поміщає туди всі глобальні оголошення (
var,function).
Приклад:
var a = 42;
function sayHi() {
console.log("Hi");
}
console.log(globalThis.a); // 42
globalThis.sayHi(); // "Hi"Відмінність let і const від var
Змінні, оголошені через let і const:
- не стають властивостями глобального об'єкта,
- але все одно існують у глобальній області видимості.
Приклад:
let a = 10;
var b = 20;
console.log(window.a); // undefined
console.log(window.b); // 20Підсумок
| Особливість | Опис |
|---|---|
| Що це | Об'єкт верхнього рівня, що існує завжди |
| Де живе | У глобальному контексті виконання |
| Автоматично містить | Глобальні функції (setTimeout, fetch, console, ...) |
| Як звернутися | window (браузер), global (Node.js), globalThis (універсально) |
Особливості let/const | Не стають властивостями глобального об'єкта |
Приклад використання globalThis на практиці
globalThis.appName = "DemoApp";
function printName() {
console.log(globalThis.appName);
}
printName(); // "DemoApp"Працює і в браузері, і в Node.js, і в будь-якому середовищі.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.