Что такое глобальные переменные?nodejs-193

Глобальные переменные — это переменные, доступные во всех модулях и областях видимости приложения без необходимости их явного импорта. В Node.js они существуют в глобальном объекте, но имеют важные отличия от браузерного JavaScript.

Основные глобальные переменные в Node.js

Node.js предоставляет несколько встроенных глобальных переменных:

console.log(__dirname);  // Путь к текущей директории
console.log(__filename); // Полный путь к текущему файлу
console.log(process);    // Информация о текущем процессе
console.log(module);     // Текущий модуль
console.log(require);    // Функция для импорта модулей

Глобальный объект в Node.js

В отличие от браузера, где глобальный объект называется window, в Node.js используется global:

global.myVariable = 'Доступно везде';
console.log(myVariable); // 'Доступно везде'

Особенности работы глобальных переменных

  1. Область видимости:

    • Доступны во всех модулях приложения
    • Не требуют импорта
  2. Модульная система:

    • Каждый файл в Node.js имеет свою область видимости
    • Переменные, объявленные без var, let или const, не становятся глобальными
  3. Пример создания:

    // Не становится глобальной (модульная система Node.js)
    accidentalGlobal = 'Опасно!';
    
    // Явное создание глобальной переменной
    global.actualGlobal = 'Правильно';
    

Проблемы глобальных переменных

  1. Загрязнение пространства имен:

    // module1.js
    global.config = { env: 'dev' };
    
    // module2.js
    global.config = { env: 'prod' }; // Конфликт!
    
  2. Сложность тестирования:

    • Глобальное состояние усложняет изолированное тестирование модулей
  3. Неявные зависимости:

    • Код становится менее предсказуемым

Альтернативы глобальным переменным

  1. Использование модулей:

    // config.js
    module.exports = { env: process.env.NODE_ENV };
    
    // app.js
    const config = require('./config');
    
  2. Переменные окружения:

    // .env файл
    DB_HOST=localhost
    
    // Приложение
    console.log(process.env.DB_HOST);
    
  3. Система зависимостей:

    • Внедрение зависимостей через конструкторы/функции

Лучшие практики

  1. Избегайте глобальных переменных там, где это возможно
  2. Используйте явное присваивание через global, если необходимо
  3. Документируйте глобальные переменные, если их использование неизбежно
  4. Применяйте паттерны типа Singleton для глобального доступа к ресурсам

Резюмируем:


Глобальные переменные в Node.js, доступные через объект global, представляют мощный, но потенциально опасный инструмент. В отличие от браузерного JavaScript, Node.js предлагает модульную систему как основную альтернативу глобальному состоянию. Грамотное использование глобальных переменных требует понимания их влияния на архитектуру приложения и тестируемость кода.