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

«Привет, ребята, в сегодняшней статье я хочу поговорить о глобальных переменных в Node. Эта статья предназначена для разработчиков от новичка до среднего уровня навыков работы с Node. Если вы никогда не слышали о глобальных переменных и не работали с ними, не о чем беспокоиться. Эта статья поможет вам в кратчайшие сроки приступить к работе со всем, что вам нужно знать о глобальных переменных. Что такое глобальные переменные? Глобальные переменные очень похожи, если не идентичны, с обычными переменными. Глобальные переменные могут быть

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

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

Глобальные переменные очень похожи, если не идентичны, с обычными переменными. Глобальные переменные могут быть инициализированы значением, это значение может быть изменено и даже может быть очищено, как обычная переменная. Разница между обычной переменной и глобальной переменной сводится к их области действия. Когда вы создаете переменную в файле 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. Затем вы объявляете переменную в этом большом файле-контейнере, и теперь эта переменная имеет область действия во всей программе. Если вы не уверены, что такое пространство имен, или хотите узнать о них больше, прочтите эту статью, чтобы узнать больше.

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

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

 // 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 а затем присваиваете ей значение, глобальный объект установит свойство для этой переменной. Этот процесс по сути превращает его в глобально доступную переменную. Я настоятельно не рекомендую использовать этот метод, так как это неправильный способ создания глобальных объектов. Также важно отметить, что если вы установите 'use strict' , Node отключит неявные глобальные переменные, и вы, скорее всего, получите ошибку во время выполнения, а не рабочий скрипт.

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

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

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

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

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

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

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

 // Node Globals 
 
 console.log("Hello World!"); 
 
 process.env.PORT = 3000; 
 
 setInterval({ 
 console.log("2 seconds passed."); 
 }, 2000); 

Если вы посмотрите на приведенный выше блок кода, вы, вероятно, увидите по крайней мере один экземпляр, который вы использовали раньше, console.log() . Согласно документации Node, консольный объект является глобальным, у которого есть несколько методов, позволяющих разработчикам делать такие вещи, как печать журнала или сообщение об ошибке. Углубившись в документацию, мы увидим, что console на самом деле является глобальным экземпляром, настроенным для записи в process.stdout и process.stderr .

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

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

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

Учить больше

Хотите узнать больше об основах Node.js? Лично я бы порекомендовал онлайн-курс, например Learn Node.js Уэса Боса,{.bos-link} поскольку за видео намного легче следить, и вы действительно сможете создать реальное приложение.

Заключение

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

comments powered by Disqus