Глобальний об'єкт global
1. Що таке global у Node.js
global- це глобальний об'єкт Node.js, який існує в усіх модулях і зберігає глобально доступні змінні та функції, видимі з будь-якого місця програми.
Аналог в інших середовищах:
| Середовище | Глобальний об'єкт |
|---|---|
| Node.js | global |
| Браузер | window |
| Web Workers | self |
| Сучасний стандарт | globalThis |
2. Головна ідея
Коли ти запускаєш Node.js-застосунок, він виконується у своєму процесі й середовищі.
Деякі об'єкти (наприклад, process, Buffer, console) мають бути доступні в будь-якому модулі,
тому вони визначені як властивості об'єкта global.
3. Приклад
console.log(global); // виведе всі глобальні властивостіПриклад ключових властивостей:
{
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. Перевірка:
console.log(this === global); // falseЧому? У Node.js кожен файл - це модуль, і він обгорнутий у функцію:
(function(exports, require, module, __filename, __dirname) {
// твій код
});Тому this усередині файлу відноситься до module.exports,
а не до global.
6. Доступ до глобальних об'єктів
Ти можеш використовувати глобальні функції без імпорту:
setTimeout(() => console.log('Hello!'), 1000);
console.log(process.pid);
console.log(Buffer.from('Hi!'));Під капотом усе це властивості об'єкта global:
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 (але не рекомендується!):
global.APP_NAME = 'MyApp';
global.VERSION = '1.0.0';
console.log(APP_NAME); // MyAppПрацює в будь-якому модулі:
// app.js
global.APP_NAME = 'ShopX';
// routes.js
console.log(APP_NAME); // ShopXАле це погана практика, тому що:
- створює приховані залежності між модулями;
- ускладнює тестування й налагодження;
- може призвести до конфліктів імен.
Краще експортувати дані явно:
// config.js
export const APP_NAME = 'ShopX';9. Різниця між global і globalThis
| Об'єкт | Де доступний | Примітка |
|---|---|---|
global | Тільки в Node.js | Node-специфічний |
window | Тільки в браузері | Браузерний |
globalThis | Універсальний | Працює і в Node.js, і в браузері |
Приклад:
console.log(globalThis === global); // true в Node.js
console.log(globalThis === window); // true в браузері10. Приклад практичного застосування
Перевірка середовища:
if (global.process) {
console.log('Код виконується в Node.js');
}Створення глобальної змінної з безпечною перевіркою:
if (!globalThis.config) {
globalThis.config = { env: 'development' };
}
console.log(globalThis.config.env); // development11. Візуально
┌────────────────────────────────┐
│ 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.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.