В этом руководстве вы узнаете об области видимости переменных в 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.
Следовательно, значение a изменяется после его изменения внутри функции.
Примечание . Рекомендуется избегать использования глобальных переменных, поскольку значение глобальной переменной может изменяться в разных областях программы. Это может привести к неизвестным результатам в программе.
В 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 is 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
versus var
, посетите JavaScript let vs var.