В този урок ще научите за променливия обхват в JavaScript с помощта на примери.
Обхватът се отнася до наличието на променливи и функции в определени части на кода.
В JavaScript променливата има два вида обхват:
- Глобален обхват
- Местен обхват
Глобален обхват
Променлива, декларирана в горната част на програма или извън функция, се счита за глобална променлива на обхвата.
Да видим пример за глобална променлива на обхвата.
// program to print a text let a = "hello"; function greet () ( console.log(a); ) greet(); // hello
В горната програма променлива a е декларирана в горната част на програма и е глобална променлива. Това означава, че променливата 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
В горната програма променливата a е глобална променлива. Стойността на a е здравей. След това променливата a е достъпна във функция и стойността се променя на 3.
Следователно стойността на промяната се променя след промяната й във функцията.
Забележка : Добра практика е да се избягва използването на глобални променливи, защото стойността на глобална променлива може да се променя в различни области на програмата. Той може да въведе неизвестни резултати в програмата.
В JavaScript променлива може да се използва и без да се декларира. Ако се използва променлива, без да се декларира, тя автоматично се превръща в глобална променлива.
Например,
function greet() ( a = "hello" ) greet(); console.log(a); // hello
В горната програма променливата a е глобална променлива.
Ако променливата е декларирана с използване let a = "hello"
, програмата ще изведе грешка.
Забележка : В JavaScript има "strict mode";
променлива, която не може да се използва без да я декларира. За да научите повече за стриктно, посетете JavaScript Strict.
Местен обхват
Променливата може да има и локален обхват, т.е. тя може да бъде достъпна само в рамките на функция.
Пример 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
Изход
helloWorld Uncaught ReferenceError: b не е дефиниран
В горната програма променливата a е глобална променлива, а променливата b е локална променлива. Променливата b може да бъде достъпна само във функцията greet. Следователно, когато се опитваме да получим достъп до променлива b извън функцията, възниква грешка.
let е Block Scoped
В 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();
Изход
Hello World Hello World hello Uncaught ReferenceError: x не е дефиниран
В горната програма променлива
- a е глобална променлива. Той може да бъде достъпен навсякъде в програмата.
- b е локална променлива. Той може да бъде достъпен само във функцията
greet
. - c е променлива с обхват на блок. Той може да бъде достъпен само вътре в
if
блока с оператори.
Следователно в горната програма първите две console.log()
работят без проблем.
Опитваме се обаче да получим достъп до променливата с обхват на блока c извън блока в третата console.log()
. Това ще доведе до грешка.
Забележка : В JavaScript var
функцията е с обхват и let
е с блоков обхват. Ако се опитате да използвате var c = 'hello';
вътре if
израза в горната програма, цялата програма работи, тъй като c се третира като локална променлива.
За да научите повече за let
срещу var
, посетете JavaScript let vs var.