У овом упутству ћете научити о променљивом опсегу у ЈаваСцрипт-у уз помоћ примера.
Опсег се односи на доступност променљивих и функција у одређеним деловима кода.
У ЈаваСцрипт-у променљива има две врсте опсега:
- Глобал Сцопе
- Локални опсег
Глобал Сцопе
Променљива декларисана на врху програма или изван функције сматра се променљивом глобалног опсега.
Погледајмо пример променљиве глобалног опсега.
// program to print a text let a = "hello"; function greet () ( console.log(a); ) greet(); // hello
У горњем програму променљива а је декларисана на врху програма и представља глобалну променљиву. То значи да се променљива a
може користити било где у програму.
Вредност глобалне променљиве може се мењати унутар функције. На пример,
// program to show the change in global variable let a = "hello"; function greet() ( a = 3; ) // before the function call console.log(a); //after the function call greet(); console.log(a); // 3
У горњем програму променљива а је глобална променљива. Вредност а је здраво. Тада се променљивој а приступа унутар функције и вредност се мења на 3.
Дакле, вредност промене се мења након промене унутар функције.
Напомена : Добра је пракса избегавати употребу глобалних променљивих, јер се вредност глобалне променљиве може променити у различитим областима програма. Може да уведе непознате резултате у програм.
У ЈаваСцрипт-у се променљива такође може користити без декларисања. Ако се променљива користи без декларисања, та променљива аутоматски постаје глобална променљива.
На пример,
function greet() ( a = "hello" ) greet(); console.log(a); // hello
У горњем програму променљива а је глобална променљива.
Ако је променљива декларисана коришћењем let a = "hello"
, програм ће избацити грешку.
Напомена : У ЈаваСцрипт- "strict mode";
у постоји променљива која се не може користити без декларисања. Да бисте сазнали више о стриктном, посетите ЈаваСцрипт Стрицт.
Локални опсег
Варијабла такође може имати локални опсег, односно може јој се приступити само у оквиру функције.
Пример 1: Променљива локалног опсега
// program showing local scope of a variable let a = "hello"; function greet() ( let b = "World" console.log(a + b); ) greet(); console.log(a + b); // error
Оутпут
хеллоВорлд Унцаугхт РеференцеЕррор: б није дефинисан
У горњем програму, променљива а је глобална променљива, а променљива б је локална променљива. Променљивој б може се приступити само унутар функције греет. Дакле, када покушавамо да приступимо променљивој б изван функције, долази до грешке.
нека је Блоцк Сцопед
let
Кључна реч је блок-сцопед (променљива може се приступити само у непосредној блок).
Пример 2: променљива опсега блока
// program showing block-scoped concept // global variable let a = 'Hello'; function greet() ( // local variable let b = 'World'; console.log(a + ' ' + b); if (b == 'World') ( // block-scoped variable let c = 'hello'; console.log(a + ' ' + b + ' ' + c); ) // variable x cannot be accessed here console.log(a + ' ' + b + ' ' + c); ) greet();
Оутпут
Хелло Ворлд Хелло Ворлд хелло Унцаугхт РеференцеЕррор: к није дефинисан
У горњем програму променљива
- а је глобална променљива. Може му се приступити било где у програму.
- б је локална променљива. Може му се приступити само унутар функције
greet
. - ц је променљива опсега блока. Може му се приступити само унутар
if
блока извода.
Дакле, у горњем програму, прва два console.log()
раде без икаквих проблема.
Међутим, у трећем покушавамо да приступимо блок-опсегу променљиве ц изван блока console.log()
. Ово ће довести до грешке.
Напомена : У ЈаваСцрипт-у var
је опсег функције и опсег let
блока. Ако покушате да користите var c = 'hello';
унутрашњост if
израза у горенаведеном програму, цео програм ради, пошто се ц третира као локална променљива.
Да бисте сазнали више о let
версус var
, посетите ЈаваСцрипт лет вс вар.