Какво е Scope в JavaScript?

Обхватът в JavaScript се отнася до това до какви променливи вашата програма има достъп във всеки даден момент от времето. Така че нека започнем да загребваме в този обхват...

Какви са различните видове обхвати?

  • Глобален обхват
  • Обхват на функцията
  • Обхват на блока

По подразбиране, когато кодирате в JavaScript, започвате в обхвата на прозореца или основния обхват. Това е глобалният обхват. Това означава, че има само един глобален обхват в JS документ.

Глобални променливи

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

Локални променливи

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

Ако изпълните този код, глобалната променлива globalVar може да бъде достъпна във функцията localScope. Въпреки това, локалната променлива localVar може да бъде достъпна само в обхвата на функцията localScope, а не в глобалния обхват.

Можете да мислите за местните обхвати като за дневник. Преструвайте се, че сте дете, което води дневник (локален обхват). Можете да пишете каквото искате във вашия дневник (т.е. да създавате толкова променливи, колкото искате във функция) и да наименувате събития, които са се случили извън вашия дневник (достъп до глобални променливи извън вашата функция или извикване на други функции). Никой друг обаче не може да надникне във вашия дневник, ОСОБЕНО родителите ви… кашлица… кашлица…ГЛОБАЛНИ ОБХВАТИ. Подобно на начина, по който родителят не може да погледне в дневника на детето, вие не можете да получите достъп до локални променливи в глобалния обхват.

Обхват на функцията

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

Ако изпълните този код, променливата me във функцията myMoney не е достъпна във функцията ourMoney. Когато конзолата регистрира me в yourMoney, се извежда грешка.
Функциите нямат достъп до обхватите на другите.

Обхват на блока

Ако декларирате променлива във фигурни скоби { } като в if израз или for цикъл, вие създавате блоков обхват.

Променливи ключови думи

Променливите, декларирани с ключовите думи let или const, имат блоков обхват.
Променливите, декларирани с ключовата думаvar, имат функционален обхват. Променливите, декларирани с var, могат да бъдат достъпни само във функцията, където са декларирани (или глобално, ако са декларирани в глобалния обхват). Var има само локален обхват, когато е деклариран във функция, което означава, че ако променлива е декларирана в блок, тя може да бъде достъпна извън този блок.

Ако изпълните този код, само променливата на ключовата дума var ще регистрира стойността си извън блоковия обхват на оператора if. Това не се случва с променливата blockScope, защото е декларирана с ключовата дума let.

Въпреки това,

Ако изпълните този код, променливата onlyFunctionScope не е налична извън функцията varScope, защото е декларирана с var и това е ключова дума за обхвата на функцията.

В заключение, създавайки нова функция или блоково изявление (всичко с фигурни скоби {}), вие създавате нов обхват. Като цяло придобиването на разбиране за това как работи обхватът в JavaScript, ще ви помогне да проследявате грешки и ще ви помогне да избегнете създаването на сблъсъци. Разбирането на променливите и техния обхват ще ви позволи да създавате по-ефективни програми, които са правилно именувани. Ще бъдете по-добри в декларирането на променливи и в избора на това кои променливи къде да отидат. Когато създавате една и съща глобална променлива два пъти в голяма програма, можете лесно да попаднете на грешки, но благодарение на локалните обхвати не е нужно да разчитате на глобални обхвати за съхранение данни. Което може да бъде объркващо в дългосрочен план или при работа по по-големи проекти.