Рубрики
Без рубрики

Использование глобальных переменных в Node.js

Автор оригинала: Sam Galizia.

Эй, ребята, в современной статье я хочу поговорить о глобальных переменных в узле. Эта статья направлена на разработчиков, которые находятся на новичке для промежуточного уровня квалификации, работающего с узлом. Если вы никогда не слышали о глобальных переменных и не работали с ними, не нужно беспокоиться. Эта статья увидит вас и работает в кратчайшие сроки со всем, что вам нужно знать о глобальных переменных.

Каковы глобальные переменные?

Глобальные переменные очень похожи, если не идентичны, для регулярных переменных. Глобальные переменные могут быть инициализированы со значением, что значение может быть изменено, и они могут даже быть очищены как обычная переменная. Разница между регулярной переменной и глобальной переменной сводится к их объему. Когда вы создаете переменную в файле JavaScript, что переменные существуют только в объеме, в котором он был объявлен. Теперь, что я имею в виду под этим? В приведенном ниже коде вы можете увидеть пример двух разных переменных с разными областями.

// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";

В кодовом фрагменте выше, мы видим, что есть две переменные, FileScope и localscope Отказ Переменная FileScope Можно изменить или вызываться из любой точки в этом файле, тогда как localscope Переменная существует только внутри функции dosomething () Отказ Я уверен, что в этот момент вам интересно, что это связано с глобальными переменными. Когда мы говорим о глобальных переменных, они существуют для всех файлов в программе, означающем, что у них есть глобальные возможности для программы.

Причина, по которой это возможно, заключается в том, что программы JavaScript разделяют глобальное пространство имен между всеми файлами в программе. Чтобы поставить его другим способом, представьте, что ваша программа является гигантским файлом или контейнером, который имеет «импортированные» все другие файлы JavaScript. Затем вы объявляете переменную в этом большом файле контейнера, эта переменная теперь имеет объем на протяжении всей программы. Если вы не уверены, что является пространством имен или вы хотите узнать о них больше, проверьте Эта статья Узнать больше.

Как объявить и использовать глобальную переменную

Теперь, когда у нас лучше понимать, какая глобальная переменная в узле, давайте поговорим о том, как мы фактически устанавливаем и используем глобальную переменную. Чтобы настроить глобальную переменную, нам нужно создать ее на глобальном объекте. Глобальный объект – это то, что дает нам объем всего проекта, а не просто файл (модуль), в которой была создана переменная. В блоке кода ниже мы создаем глобальную переменную, называемую GlobalString И мы даем это ценность. Далее мы меняем значение GlobalString , а затем, наконец, мы установили его на неопределенный.

// Global.js

global.globalString = "This can be accessed anywhere!";
console.log(globalString); // Output: "This can be accessed anywhere!"

globalString = "Check me out now";
console.log(globalString); // Output: "Check me out now"

globalString = undefined;
console.log(globalString); // Output: undefined
// Example.js
 
// We can use the global we created in Global.js in this file 
// as well.
console.log(globalString); // Output: undefined
 
globalString = "We can change it too!"; 
console.log(globalString); // Output: "We can change it too!"

То, о чем я не говорил, это еще один способ, которым вы можете сделать переменную глобальную. Причина, по которой я исключен, что это потому, что это не правильный способ создания переменной. Если вы объявите переменную в файле без использования ключевого слова var А затем назначьте его значение, глобальный объект установит свойство для этой переменной. Этот процесс по существу превращает его в глобально доступную переменную. Я настоятельно рекомендую по сравнению с использованием этого метода, хотя, так как он не является правильным способом для создания глобалей. Также важно отметить, что если вы установите «Используйте строгий» Директива, узел отключит неявные глобалы, и вы, скорее всего, получите ошибку во время выполнения, а не рабочий скрипт.

Практические случаи использования для глобальных переменных

Теперь вы можете думать себе, что вы хотите выйти и создать глобальные переменные теперь, когда вы узнаете о них больше. Я собираюсь сильно осторожно против создания глобальных переменных на несколько очень важных причин.

Первая причина в том, что когда вы создаете глобальную переменную, она существует в течение всей жизни приложения. Когда переменная сохраняется через срок службы приложения, это означает, что в памяти, занимая ресурсы во время работы приложения.

Во-вторых, традиционно использование глобальных переменных может вызвать проблемы параллелизма. Если несколько потоков могут получить доступ к одной и той же переменной, и на месте нет модификаторов доступа или отказов, оно может привести к некоторым серьезным проблемам двух потоков, пытающихся доступа и использовать ту же переменную. Однако , Хотя это в этом случае на других языках, это не обязательно для Node.js, как это строго однопоточная среда. Пока это это Возможны процессы кластера узла, между ними нет родного способа общаться.

Последняя причина, по которой я собираюсь говорить о том, что использование глобалей может вызвать неявное соединение между файлами или переменными. Муфта не очень хорошая вещь, когда дело доходит до написания отличного кода. При написании кода мы хотим убедиться, что он такой же модульный и многоразовый, как это возможно, также убедившись, что он прост в использовании и понимание. Соединительные кусочки вашего кода вместе могут привести к некоторым крупным головным болям по дороге, когда вы пытаетесь отладить, почему-то не работает.

Если вы хотите узнать больше о том, почему глобалы не рекомендуются, вы можете проверить эту отличную статью под названием Глобальные переменные плохие Отказ

Если вы чувствуете себя смущенным с целью глобальных переменных, не бойтесь. Мы собираемся взглянуть на несколько глобальных переменных, которые встроены в узле и попытаются лучше понять, почему они глобальные и как они используются. На самом деле, вы, вероятно, использовали несколько из них, даже не осознавая, что они являются глобальными объектами!

// Node Globals

console.log("Hello World!");

process.env.PORT = 3000;

setInterval({
  console.log("2 seconds passed.");
}, 2000);

Если вы взгляните на вышеуказанный код выше, вы, вероятно, увидите, по крайней мере, один экземпляр, который вы использовали ранее, console.log () Отказ Согласно документации узла, объект консоли – это глобальный, который имеет несколько методов, позволяющих разработчикам делать такие вещи, как печатать журнал или ошибку. Копать глубже в документы, которые мы можем видеть, что Консоль действительно глобальный экземпляр, который настроен для записи на Process.Stdout и Process.Stderr Отказ

Это приводит нас к следующему утверждению, которое вы видите в блоке кода выше, Процесс объект. Если вы поставили производственную сборку приложения узла, вы, вероятно, должны были установить порт для переменной окружающей среды. Переменная среды env является частью Процесс объект, который является еще одним глобальным. Вы можете получить доступ к переменным на Процесс Объект в любом файле в вашем проекте, потому что он глобальный. Если этот объект не был глобальным, Консоль Объект не будет доступен из любого файла, помните, что это действительно объект, который возвращается к Процесс объект.

Setinterval Это еще одна функция, которую вы, возможно, видели раньше, если бы у вас когда-либо имели основания, чтобы задержать операцию, прежде чем его выполнять. Сетримс и Setimmediate похожи в природе, чтобы Setinterval и также являются как глобальными функциями. Эти три функции являются частью модуля таймера, который обнародовал глобальную API, позволяющую вызову эти функции, не требуя таймера в ваших файлах.

Все вышеупомянутые случаи использования встроены в узле и являются глобальными по причине. Процесс Объект является глобальным, поскольку он предоставляет информацию о текущем процессе выполнения узла и, следовательно, должен быть доступен из любого файла без необходимости его необходимости. То же самое можно сказать о модуле таймера, который содержит ряд функций, которые важны и должны быть доступны в любом месте без необходимости его необходимости. Если вы хотите узнать больше о существующих глобальных объектах, встроенных в узле, я рекомендую вам посетить Официальная документация по глобалам Отказ

Учить больше

Хотите узнать больше о основах Node.js? Лично я бы порекомендовал онлайн курс, как WES BOS ‘Узнайте Node.js Поскольку видеоролики намного проще следовать, и вы действительно получите приложение по реальному миру.

Заключение

Я знаю, что это было довольно много информации, так что спасибо за то, что вынули его. Все вышеперечисленная информация была найдена в документации на Сайт узла Отказ Пожалуйста, не стесняйтесь задавать вопросы и дать комментарии в разделе «Комментарий» ниже. До следующего раза, ребята!