„Опсег“ се односи на тренутни контекст извршења у којем ваш код може да референцира или „види“ вредности и изразе. Променљиве, објекти и функције из различитих делова кода су доступни на основу њиховог опсега.
У ЈаваСцрипт-у, променљиве, објекти и функције могу имати глобални опсег, опсег модула, опсег блока или опсег функције.
Глобални опсег у ЈаваСцрипт-у
Свака вредност декларисана ван функције или блока у скрипти има глобални опсег и било која друга датотека скрипте у вашем програму може јој приступити.
На пример, декларисање глобалне променљиве у једној датотеци:
// индек.јс
нека глобалВариабле = "неку вредност"
То значи да било која друга скрипта у вашем програму може да јој приступи:
// отхерСцрипт.јс
конзола.лог (глобалВариабле) // нека вредност
Декларисање ЈаваСцрипт променљивих у глобалном обиму је лоша пракса јер може довести до загађења простора имена. Глобални простор имена је горњи простор Јавасцрипт-а који садржи променљиве, објекте и функције. У претраживачу се повезује са Прозор објекат, док НодеЈС користи објекат под називом глобално.
Загађивање глобалног простора имена може довести до колизије имена. Ово је ситуација у којој ваш код покушава да користи исто име променљиве за различите ствари у истом именском простору. Колизије имена се често сусрећу у великим пројектима који користе неколико библиотека трећих страна.
Обим модула
Модул је самостална датотека која инкапсулира и извози делове кода за друге модуле у пројекту за коришћење. Омогућава вам да ефикасније организујете и одржавате своју базу кодова.
ЕС модули формализовани шаблон ЈаваСцрипт модула у ЈаваСцрипт-у 2015.
Променљиве које декларишете у модулу су обухваћене тим модулом, што значи да ниједан други део програма не може да им приступи.
Можете користити само променљиву декларисану у модулу ван њега ако модул извози ту променљиву користећи извоз кључна реч. Затим можете да увезете то име у други модул користећи увоз кључна реч.
Ево примера који показује извоз класе:
// индек.јс
извозкласаФоо{
конструктор(проперти_1, проперти_2) {
ово.проперти_1 = проперти_1
ово.проперти_2 = проперти_2
}
}
А ево како можете да увезете тај модул и користите својство које извози:
// сомеМодуле.јс
увоз { Фоо } из './индек.јс'цонст бар = нев Фоо('фоо', 'бар')
конзола.лог (бар.проперти_1) // фоо
Фајлови нису декларисани као модули подразумевано у ЈаваСцрипт-у.
У ЈаваСцрипт-у на страни клијента, можете декларисати скрипту као модул тако што ћете поставити тип приписати модул на скрипта ознака:
<тип скрипте="модул" срц="индек.јс"></script>
У НодеЈС-у можете декларисати скрипту као модул тако што ћете поставити тип власништво до модул у вашем пацкаге.јсон фајл:
{
"тип": "модул"
}
Блоцк Сцопе
Блок у ЈаваСцрипт-у је место где пар витичастих заграда почиње и завршава.
Променљиве декларисане унутар блока са дозволити, и конст кључне речи су обухваћене тим блоком, што значи да им не можете приступити изван њега. Овај опсег се не примењује на променљиве декларисане помоћу вар кључна реч:
{ // Почетак блока
цонст оне = '1'
нека два = '2'
вар три = '3'
} // Крај блокаконзола.лог (један) // јавља грешку
конзола.лог (три) // "3"
Променљиве које су затворене у блоку изнад и декларисане као цонст или лет доступне су само унутар блока. Међутим, можете приступити променљивој декларисаној помоћу вар кључна реч ван блока.
Обим функције
Променљиве декларисане унутар функције се обично називају локалним променљивим и обухватају функцију. Не можете им приступити изван функције. Овај опсег се примењује на променљиве декларисане са вар, дозволити, и конст кључне речи.
Пошто су променљиве декларисане у функцији локалне за функцију, имена променљивих се могу поново користити. Поновно коришћење имена променљивих у опсегу функције познато је као сенчење променљивих, а за спољашњу променљиву се каже да је „засенчена“.
На пример:
функцијаумножити() {
дозволити један = 1
вар два = 2
конст три = 3повратак један два три
}
// Променљиво сенчење
конст три = 'три' // Не даје грешку
Разумевање правила обима је од виталног значаја
Познавање доступних опсега у ЈаваСцрипт-у олакшава вам да избегнете грешке. Покушај приступа променљивој која није доступна у одређеном опсегу је зрео извор грешака.
Разумевање обима такође укључује концепте као што је глобално загађење простора имена, што може учинити ваш код склонијим грешкама.