Понимание областей действия переменных в JavaScript

Опубликовано: 16 Июля, 2021

В JavaScript есть два типа областей видимости.

  1. Глобальная область - область за пределами самой внешней функции, прикрепленной к окну.
  2. Локальная область видимости - внутри выполняемой функции.

Посмотрим на код ниже. У нас есть глобальная переменная, определенная в первой строке глобальной области видимости. Затем у нас есть локальная переменная, определенная внутри функции fun ().




let globalLet = "This is a global variable" ;
function fun() {
let localLet = "This is a local variable" ;
console.log(globalLet); // This is a global variable
console.log(localLet); // This is a local variable
}
fun();

Выход:

Когда мы выполняем функцию fun (), вывод показывает, что как глобальные, так и локальные переменные доступны внутри функции, поскольку мы можем их console.log. Это показывает, что внутри функции у нас есть доступ как к глобальным переменным (объявленным вне функции), так и к локальным переменным (объявленным внутри функции). Давайте переместим операторы console.log за пределы функции и поместим их сразу после вызова функции.




let globalLet = "This is a global variable" ;
function fun() {
let localLet = "This is a local variable" ;
}
fun();
console.log(globalLet); // This is a global variable
console.log(localLet); // localLet is not defined

Выход:

Мы все еще можем видеть значение глобальной переменной, но для локальной переменной console.log выдает ошибку. Это связано с тем, что теперь операторы console.log присутствуют в глобальной области видимости, где они имеют доступ к глобальным переменным, но не могут получить доступ к локальным переменным.

Предупреждение: всякий раз, когда вы объявляете переменные, всегда используйте префикс let. Если вы не используете ключевое слово let, переменные по умолчанию создаются в глобальной области. Например, в приведенном выше примере давайте просто удалим ключевое слово let перед объявлением localLet.




let globalLet = "This is a global variable";
   
function fun() {
   localLet = "This is a local variable";
}
   
fun();
  console.log(globalLet); // This is a global variable
  console.log(localLet); // This is a local variable

Выход:

Теперь мы можем также занести в console.log локальную переменную, потому что localLet был создан в глобальной области видимости, поскольку мы пропустили ключевое слово let при его объявлении. На самом деле произошло то, что, поскольку мы не использовали ключевое слово let, JavaScript сначала искал localLet в локальной области видимости, а затем в глобальной. Поскольку глобальной переменной с таким именем не существовало, была создана новая глобальная переменная.
Один из наиболее часто задаваемых вопросов в интервью - это сценарий, в котором глобальная и локальная переменные имеют одно и то же имя. Посмотрим, что будет потом.




let globalLet = "This is a global variable" ;
function fun() {
let globalLet = "This is a local variable" ;
}
fun();
console.log(globalLet); // This is a global variable

Выход:

В этом примере мы объявили как локальную, так и глобальную переменную globalLet. Здесь важна область, в которой мы получаем к ней доступ. В приведенном выше примере мы обращаемся к нему в глобальной области видимости, поэтому он будет выводить глобальную переменную, поскольку локальная переменная отсутствует в его области. Давайте переместим оператор console.log внутрь функции fun ().




let globalLet = "This is a global variable" ;
function fun() {
let globalLet = "This is a local variable" ;
console.log(globalLet); // This is a local variable
}
fun();

Выход:

Внутри функции fun () доступны как локальные, так и глобальные переменные. Но когда мы console.log переменную globalLet, сначала JavaScript пытается найти локальную переменную в текущей области. Он находит локальную переменную и выводит ее. В противном случае он будет искать переменную globalLet во внешней области (которая в данном случае является глобальной).

Что, если мы хотим получить здесь доступ к глобальной переменной вместо локальной. Что ж, на помощь приходит оконный объект. Все глобальные переменные привязаны к объекту окна, и поэтому мы можем получить доступ к имени глобальной переменной, как показано в примере ниже.




let globalLet = "This is a global variable" ;
function fun() {
let globalLet = "This is a local variable" ;
console.log(window.globalLet); // This is a global variable
}
fun();

Выход:

После обсуждения областей видимости в JavaScript, угадать результат нижеприведенных фрагментов кода должно быть легкой прогулкой.




function fun(){
function fun2(){
i = 100;
}
fun2();
console.log(i); // 100
}
fun();

Выход:




function fun(){
function fun2(){
let i = 100;
}
fun2();
console.log(i); // i is not defined
}
fun();

Выход:

В первом примере, поскольку мы не использовали ключевое слово let, предполагалось, что переменная «i» объявлена в глобальной области видимости, и поэтому на выходе было 100. Во втором примере «i» стала локальной переменной и, следовательно, не была доступный за пределами этой функции.

Давайте посмотрим на другой пример -




function fun(){
if ( true ){
let i = 100;
}
console.log(i); // i is not defined
}
fun();

Выход:

После ES2015 мы начали использовать let вместо var для объявления переменных, а теперь блок if также считается областью блока, поэтому в приведенном выше примере мы получаем ошибку вместо значения 100. Если мы изменим let на var, мы получит 100 в качестве вывода, как если бы блок ранее не считался областью действия блока, а были только функции.

Об авторе:

«Харшит является энтузиастом технологий и проявляет большой интерес к программированию. Он имеет степень бакалавра технических наук. получил степень в области компьютерных наук в JIIT, Нойда, и в настоящее время работает Front-end разработчиком в SAP. Он также является игроком в настольный теннис государственного уровня. Кроме того, он любит расслабляться, просматривая фильмы и английские комедийные сериалы. Он базируется в Дели, и вы можете связаться с ним по адресу https://in.linkedin.com/pub/harshit-jain/2a/129/bb5.

Если вы также хотите продемонстрировать здесь свой блог, пожалуйста, посетите GBlog, где вы можете писать в гостевом блоге на GeeksforGeeks.