Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Глобальний об'єкт». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Глобальний об'єкт** - об'єкт верхнього рівня, який завжди існує в JS-середовищі й містить усі глобальні змінні та функції; у браузері це `window`, у Node.js - `global`, а `globalThis` (ES2020) працює однаково скрізь. **Ключове:** змінні, оголошені через `var`, автоматично стають властивостями глобального об'єкта, а `let` і `const` - ні, хоча й далі перебувають у глобальній області видимості.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Що таке глобальний об'єкт **Глобальний об'єкт** - це спеціальний об'єкт, який існує завжди, **незалежно від середовища** (браузер, Node.js тощо). Він представляє **глобальну область**, у якій перебувають усі глобальні змінні та функції. Простіше кажучи: > Глобальний об'єкт - це «контейнер», у якому живуть усі змінні й функції, оголошені поза функціями та модулями. --- ## Приклади глобальних об'єктів у різних середовищах | Середовище | Глобальний об'єкт | |---|---| | **Браузер** | `window` або `self` | | **Web Worker** | `self` | | **Node.js** | `global` | | **Сучасний універсальний спосіб** | `globalThis` | --- ## Приклад: браузер ```javascript var x = 10; console.log(window.x); // 10 console.log(this.x); // 10 (у глобальній області) ``` Змінна `x`, оголошена через `var`, автоматично стає властивістю глобального об'єкта `window`. --- ## Приклад: Node.js ```javascript var y = 5; console.log(global.y); // undefined ``` У Node.js змінні `var`, `let`, `const` **не додаються** в `global`, тому що Node.js використовує модульну систему (кожен файл - окремий модуль, не глобальний скрипт). --- ## Універсальний спосіб: globalThis ES2020 запровадив новий стандарт - `globalThis`, який працює однаково **в усіх середовищах**. ```javascript console.log(globalThis); ``` Працює: - у браузері → `window` - у Node.js → `global` - у web worker → `self` --- ## Взаємозв'язок з контекстом виконання Коли створюється **глобальний контекст виконання**, рушій JS: 1. створює **глобальний об'єкт**; 2. встановлює `this` як **посилання на цей об'єкт** (якщо не використовується `strict mode`); 3. поміщає туди всі глобальні оголошення (`var`, `function`). Приклад: ```javascript var a = 42; function sayHi() { console.log("Hi"); } console.log(globalThis.a); // 42 globalThis.sayHi(); // "Hi" ``` --- ## Відмінність let і const від var Змінні, оголошені через `let` і `const`: - **не стають властивостями глобального об'єкта**, - але все одно існують у **глобальній області видимості**. Приклад: ```javascript 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 на практиці ```javascript globalThis.appName = "DemoApp"; function printName() { console.log(globalThis.appName); } printName(); // "DemoApp" ``` Працює і в браузері, і в Node.js, і в будь-якому середовищі.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.