Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Глобальний об'єкт global». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`global`** - глобальний об'єкт Node.js (аналог `window` у браузері), який робить доступними без імпорту такі речі, як `process`, `Buffer`, `console` і таймери, у будь-якому модулі. **Ключове:** `globalThis` - стандартний ES2020-варіант, що працює однаково і в Node.js, і в браузері, тоді як `global` специфічний лише для Node.js.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 1. Що таке `global` у Node.js > `global` - це **глобальний об'єкт Node.js**, який існує в усіх модулях і зберігає **глобально доступні змінні та функції**, видимі з будь-якого місця програми. Аналог в інших середовищах: | Середовище | Глобальний об'єкт | |---|---| | **Node.js** | `global` | | **Браузер** | `window` | | **Web Workers** | `self` | | **Сучасний стандарт** | `globalThis` | ## 2. Головна ідея Коли ти запускаєш Node.js-застосунок, він виконується **у своєму процесі й середовищі**. Деякі об'єкти (наприклад, `process`, `Buffer`, `console`) мають бути доступні **в будь-якому модулі**, тому вони визначені як **властивості об'єкта** `global`. ## 3. Приклад ```javascript console.log(global); // виведе всі глобальні властивості ``` Приклад ключових властивостей: ```javascript { global: [Circular], process: [process], console: [console], setTimeout: [Function], clearTimeout: [Function], setInterval: [Function], Buffer: [class Buffer], ... } ``` ## 4. Важлива відмінність від браузера | Особливість | У браузері | У Node.js | |---|---|---| | Глобальний об'єкт | `window` | `global` | | Глобальні функції (setTimeout, console тощо) | Властивості `window` | Властивості `global` | | Оголошення `var` у глобальній області | додає у `window` | **не додає** у `global` | | Контекст `this` на верхньому рівні | `this === window` | `this !== global` | ## 5. Перевірка: ```javascript console.log(this === global); // false ``` Чому? У Node.js кожен файл - це **модуль**, і він обгорнутий у функцію: ```javascript (function(exports, require, module, __filename, __dirname) { // твій код }); ``` Тому `this` усередині файлу відноситься до `module.exports`, а не до `global`. ## 6. Доступ до глобальних об'єктів Ти можеш використовувати глобальні функції без імпорту: ```javascript setTimeout(() => console.log('Hello!'), 1000); console.log(process.pid); console.log(Buffer.from('Hi!')); ``` Під капотом усе це властивості об'єкта `global`: ```javascript global.setTimeout(() => console.log('Hello!'), 1000); global.process; global.Buffer; ``` ## 7. Приклади часто вживаних властивостей `global` | Властивість | Призначення | |---|---| | `global` | Посилання на сам глобальний об'єкт | | `process` | Інформація про процес і середовище Node.js | | `console` | Глобальний логер | | `Buffer` | Робота з бінарними даними | | `setTimeout()` / `setInterval()` / `setImmediate()` | Таймери | | `clearTimeout()` / `clearInterval()` / `clearImmediate()` | Очищення таймерів | | `queueMicrotask()` | Додавання мікрозадачі в Event Loop | | `globalThis` | Стандартний глобальний об'єкт ES2020 | | `performance` | Метрики продуктивності (починаючи з Node 8.5+) | ## 8. Створення власних глобальних змінних Можна додавати свої значення в `global` (але **не рекомендується**!): ```javascript global.APP_NAME = 'MyApp'; global.VERSION = '1.0.0'; console.log(APP_NAME); // MyApp ``` Працює в будь-якому модулі: ```javascript // app.js global.APP_NAME = 'ShopX'; // routes.js console.log(APP_NAME); // ShopX ``` Але це **погана практика**, тому що: - створює приховані залежності між модулями; - ускладнює тестування й налагодження; - може призвести до конфліктів імен. Краще експортувати дані явно: ```javascript // config.js export const APP_NAME = 'ShopX'; ``` ## 9. Різниця між `global` і `globalThis` | Об'єкт | Де доступний | Примітка | |---|---|---| | `global` | Тільки в Node.js | Node-специфічний | | `window` | Тільки в браузері | Браузерний | | `globalThis` | Універсальний | Працює і в Node.js, і в браузері | Приклад: ```javascript console.log(globalThis === global); // true в Node.js console.log(globalThis === window); // true в браузері ``` ## 10. Приклад практичного застосування ### Перевірка середовища: ```javascript if (global.process) { console.log('Код виконується в Node.js'); } ``` ### Створення глобальної змінної з безпечною перевіркою: ```javascript if (!globalThis.config) { globalThis.config = { env: 'development' }; } console.log(globalThis.config.env); // development ``` ## 11. Візуально ```javascript ┌────────────────────────────────┐ │ Node.js Runtime │ ├────────────────────────────────┤ │ global │ │ ├─ process │ │ ├─ console │ │ ├─ setTimeout() │ │ ├─ Buffer │ │ ├─ ... │ │ └─ (твої змінні, якщо додаси) │ └────────────────────────────────┘ ``` ## 12. Коротке резюме | Пункт | Опис | |---|---| | Що це | Глобальний об'єкт Node.js | | Призначення | Містить функції й змінні, доступні з будь-якого модуля | | Основні властивості | `process`, `console`, `Buffer`, `setTimeout`, `setImmediate` та ін. | | Аналог у браузері | `window` | | Сучасний стандарт | `globalThis` | | Рекомендації | Не засмічуй `global` користувацькими змінними - використовуй імпорти/експорти | ## Одним реченням: > `global` - це об'єкт верхнього рівня в Node.js, який робить доступними системні функції й змінні (наприклад, `process`, `Buffer`, `setTimeout`) у всіх модулях без імпорту, але не є областю видимості для `this` чи `var`.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.