Найти в Дзене

Область видимости в JavaScript

ECMAScript 6 Когда использовать let, а когда const. Область видимости - это важная концепция в программировании, и ООП в целом. var myVar = 1;
function setMyVar() {
 myVar = 2;
}
setMyVar();
console.log(myVar); Переменная myVar объявлена за пределами какой-либо функции, что говорит нам о том, что она объявлена в гловальной области видимости. Следовательно, любая функция, объявленная в той же области видимости, сможет обратиться к myVar. Если речь идет о коде, выполняемом в браузере, доступ к этой переменной будет даже у функций, объявленных в других файлах, подключенных к странице. function setMyVar() {   var myVar = 2; } setMyVar(); console.log(myVar); Теперь переменная не объявлена и при попытке обратиться к ней будет выведено сообщение о необработанной ошибке ReferenceError. Произошло так из-за того, что переменную объявили при помощи ключего слова var внутри функции. Не рекомендуется объявлять переменные в глобальной области видимости, так как нельзя заранее знать, какие п
Оглавление
Области видимости в JavaScript
Области видимости в JavaScript

ECMAScript 6

Когда использовать let, а когда const.

Область видимости - это важная концепция в программировании, и ООП в целом.

var myVar = 1;
function setMyVar() {
 myVar = 2;
}
setMyVar();
console.log(myVar);

Переменная myVar объявлена за пределами какой-либо функции, что говорит нам о том, что она объявлена в гловальной области видимости. Следовательно, любая функция, объявленная в той же области видимости, сможет обратиться к myVar.

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

function setMyVar() {  

var myVar = 2;

}

setMyVar();

console.log(myVar);

Теперь переменная не объявлена и при попытке обратиться к ней будет выведено сообщение о необработанной ошибке ReferenceError. Произошло так из-за того, что переменную объявили при помощи ключего слова var внутри функции.

Не рекомендуется объявлять переменные в глобальной области видимости, так как нельзя заранее знать, какие переменные будут объявлять другие разработчики. Для того чтобы обойти эту проблему, можно использовать некоторые примемы, в частности паттерны "Модуль" и "IIFE" при применении ООП.

Проблема var

function varTest() {
 for (var i = 0; i < 3; i++) {
   console.log(i);
 }
 console.log(i);
}

varTest();

После того, как цикл завершится, программа продолжает выполняться. В колнсоль, после обращения к i за пределами цикла, попадет 3, так как ключевое слово var действует за пределами функции. Если объявить переменную с использованием var, то обратиться к ней в функции можно и после выпода из цикла и других конструкций, где бы она не была объявлена.

function doSomething() {
 var myVar = 1;
 if (true) {
   var myVar = 2;
   console.log(myVar);
 }
 console.log(myVar);
}

doSomething();

Пытаясь переопределить одну и то же переменную внутни выражения if, мы не можем объявить новую переменную с тем же именем. В результате первая переменная перезаписывается внутри выражения if.

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

Использование let

Основное отличие let от var - ограниченная область видимости переменных.

function doSomething() {
 let myVar = 1;
 if (true) {
   let myVar = 2;
   console.log(myVar);
 }
 console.log(myVar);
}

doSomething();

В консоль попадут числа 2 и 1, так как if задает новую область видимости переменной, объявленной при помощи ключевого слова let.

Это не означает, что вложенные блоки кода, такие как if, отрезаны от переменных, объявленных при помощи let.

function doSomething() {
 let myVar = 1;
 if (true) {
   console.log(myVar);
 }
}

doSomething()

Но при перемешивании области видимости возникает ошибка

function doSomething() {
 let myVar = 1;
 if (true) {
   console.log(myVar);
   let myVar = 2;
   console.log(myVar);
 }
}

doSomething();

Использование const

Ключевое слово const используется для объявлениря констант. Значения констант после их инициализации менять нельзя. Данное правило относится только для приметивных типов, таких как строка или число. Если константа является объектом, то внутреннюю структуру объекта модифицировать можно.