Виждам много объркване по отношение на обхвата в JavaScript и реших, че ще направя всичко възможно, за да изясня какво означава това. Нека научим какво е обхват, защо е много важен и как работи? Така че, ако сте готови, нека започваме.

Нека първо дефинираме някои понятия, за да можем да се върнем към тях, докато учим.

Концепции:

Обхват: Как променливите на нашата програма са организирани и достъпни от двигателя на Javascript. По принцип обхватът задава въпроса „Къде живеят променливите?“ или „Къде можем да имаме достъп до определена променлива и къде не?“.

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

Обхват: Пространство или среда, в която е декларирана определена променлива. Има глобален обхват, функционален обхват и блоков обхват ;

Обхват на променлива: Област от нашия код, където може да бъде достъпна определена променлива.

Има три типа обхват в JavaScript, глобален, функционален и блоков обхват; всеки има свое поведение. Картината по-долу обобщава тези три вида.

Сега, след като имаме ясно разбиране за типа обхвати, нека се упражняваме да идентифицираме обхвати заедно. Така че нека да разгледаме кода по-долу и да видим дали можем да намерим всички обхвати и всички променливи, достъпни от функция two.

Както се досещате, myName = 'Tommy' е глобална променлива, защото е вътре в глобалния обхват, което означава, че е достъпна от всички обхвати. Вътре във функция едно виждаме възраст = 28,и както научихме, функцията създаде свой собствен обхват, който се нарича обхват на функция, и променливите в тях са достъпни само във функция. В обхват едно виждаме също Iизявлениетои функция две. Докато научаваме „цикли и оператор If, …“ създават свой собствен обхват, който се нарича блоков обхват; този обхват се отнася само за 'let'и'const.' И накрая, имаме функция две, която има свой собствен локален обхват.

Сега нека се опитаме да отговорим на първоначалния ни въпрос, кои променливи са достъпни за функция две?

Функция две има достъп до myName (глобална променлива), age(Лексикален обхват) и time (обхват на блокиране чрез оператор if) и работа(локален обхват за функция две), но функция две няма достъп до заплата. Знаете ли защо?

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

Надявам се, че сте осъзнали важността на обхвата, който ни казва кои променливи са достъпни за другите и кои променливи не са достъпни. Разбирането на обхвата ще ви помогне да откриете грешки във вашия код и наистина да разберете как работи всичко. Вярвам, че това ще ви отличи от много други програмисти, които не знаят точното значение зад обхвата на Javascript.