„Обхват“ се отнася до текущия контекст на изпълнение, в който вашият код може да препраща или „вижда“ стойности и изрази. Променливите, обектите и функциите от различни части на кода са достъпни въз основа на техния обхват.
В JavaScript променливите, обектите и функциите могат да имат глобален обхват, обхват на модул, обхват на блок или обхват на функция.
Глобален обхват в JavaScript
Всяка стойност, декларирана извън функция или блок в скрипт, има глобален обхват и всеки друг файл със скрипт във вашата програма има достъп до нея.
Например, деклариране на глобална променлива в един файл:
// index.js
нека globalVariable = "някаква стойност"
Означава, че всеки друг скрипт във вашата програма има достъп до него:
// otherScript.js
конзола.log (глобална променлива) // някаква стойност
Деклариране на JavaScript променливи в глобалния обхват е лоша практика, защото може да доведе до замърсяване на пространството от имена. Глобалното пространство от имена е най-горното пространство на Javascript, което съдържа променливите, обектите и функциите. В браузър се прикрепя към
прозорец обект, докато NodeJS използва обект с име глобален.Замърсяването на глобалното пространство на имена може да доведе до сблъсък на имена. Това е ситуация, в която вашият код се опитва да използва едно и също име на променлива за различни неща в едно и също пространство от имена. Сблъсъците на имена често се срещат в големи проекти, които използват няколко библиотеки на трети страни.
Обхват на модула
Модулът е самостоятелен файл, който капсулира и експортира части от код за използване от други модули в проект. Тя ви позволява да организирате и поддържате кодовата си база по-ефективно.
Формализирани ES модули моделът на модула на JavaScript в JavaScript през 2015 г.
Променливите, които декларирате в модул, са обхванати от този модул, което означава, че никоя друга част от програмата няма достъп до тях.
Можете да използвате само променлива, декларирана в модул извън него, ако модулът експортира тази променлива с помощта на износ ключова дума. След това можете да импортирате това име в друг модул, като използвате импортиране ключова дума.
Ето пример, който показва експортирането на клас:
// index.js
износкласФу{
конструктор(свойство_1, свойство_2) {
това.свойство_1 = свойство_1
това.свойство_2 = свойство_2
}
}
И ето как можете да импортирате този модул и да използвате свойството, което експортира:
// someModule.js
импортиране {Фу} от './index.js'const бар = нов Foo('Фу', 'бар')
конзола.log (bar.property_1) // foo
Файловете не се декларират като модули по подразбиране в JavaScript.
В JavaScript от страна на клиента можете да декларирате скрипт като модул, като зададете Тип атрибут към модул на сценарий таг:
<тип скрипт="модул" src="index.js"></script>
В NodeJS можете да декларирате скрипт като модул, като зададете Тип собственост към модул във вашия package.json файл:
{
"Тип": "модул"
}
Обхват на блока
Блок в JavaScript е мястото, където започва и завършва чифт фигурни скоби.
Променливи, декларирани в блок с позволявам, и конст ключовите думи са обхванати от този блок, което означава, че нямате достъп до тях извън него. Този обхват не се прилага за променливи, декларирани с помощта на вар ключова дума:
{ // Начало на блок
const one = '1'
нека две = '2'
var three = '3'
} // Край на блокаконзола.log (един) // хвърля грешка
конзола.log (три) // "3"
Променливите, затворени в блока по-горе и декларирани като const или let, са достъпни само вътре в блока. Въпреки това можете да получите достъп до променливата, декларирана с помощта на вар ключова дума извън блока.
Обхват на функцията
Променливите, декларирани във функция, обикновено се наричат локални променливи и са обхванати от функцията. Нямате достъп до тях извън функцията. Този обхват се прилага за променливи, декларирани с вар, позволявам, и конст ключови думи.
Тъй като променливите, декларирани във функция, са локални за функцията, имената на променливите могат да се използват повторно. Повторното използване на имена на променливи с функционален обхват е известно като засенчване на променливи, а външната променлива се нарича „засенчена“.
Например:
функцияумножават се() {
позволявам едно = 1
вар две = 2
конст три = 3връщане едно две три
}
// Променливо засенчване
конст три = 'три' // Не извежда грешка
Разбирането на правилата за обхват е жизненоважно
Познаването на наличните обхвати в JavaScript ви улеснява да избягвате грешки. Опитът за достъп до променлива, която не е налична в определен обхват, е зрял източник на грешки.
Разбирането на обхвата също включва концепции като глобално замърсяване на пространството от имена, което може да направи кода ви по-податлив на грешки.