„Обхват“ се отнася до текущия контекст на изпълнение, в който вашият код може да препраща или „вижда“ стойности и изрази. Променливите, обектите и функциите от различни части на кода са достъпни въз основа на техния обхват.

В JavaScript променливите, обектите и функциите могат да имат глобален обхват, обхват на модул, обхват на блок или обхват на функция.

Глобален обхват в JavaScript

Всяка стойност, декларирана извън функция или блок в скрипт, има глобален обхват и всеки друг файл със скрипт във вашата програма има достъп до нея.

Например, деклариране на глобална променлива в един файл:

// index.js
нека globalVariable = "някаква стойност"

Означава, че всеки друг скрипт във вашата програма има достъп до него:

// otherScript.js
конзола.log (глобална променлива) // някаква стойност

Деклариране на JavaScript променливи в глобалния обхват е лоша практика, защото може да доведе до замърсяване на пространството от имена. Глобалното пространство от имена е най-горното пространство на Javascript, което съдържа променливите, обектите и функциите. В браузър се прикрепя към

instagram viewer
прозорец обект, докато 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 ви улеснява да избягвате грешки. Опитът за достъп до променлива, която не е налична в определен обхват, е зрял източник на грешки.

Разбирането на обхвата също включва концепции като глобално замърсяване на пространството от имена, което може да направи кода ви по-податлив на грешки.