Область видимости — это место, где мы можем получить доступ к определенной объявленной переменной в Javascript, когда переменная недоступна в определенной области видимости, она не может быть использована в ней.
Типы областей видимости
В Javascript существует 3 основных типа областей видимости
Глобальная область видимости
Это область видимости, в которой вы можете получить доступ к любой объявленной переменной или функции, и она находится на верхнем уровне.
const name = "John";
console.log(name); // John
имя переменной создается в глобальной области видимости, поэтому она доступна везде, даже внутри области видимости функции
const name = "John";
function logName() {
console.log(name); //John
}
logName();
Область видимости функции
Это область видимости внутри функций и методов, и все, что там объявлено, не может быть доступно в глобальной области видимости
function createName() {
const name = "John";
console.log(name); // John
}
createName();
console.log(name); // name is not defined
Область видимости блока (только ES6)
Это область видимости внутри операторов if и циклов, любая переменная, объявленная там с помощью let и const, не может быть доступна вне этой области видимости.
if (true) {
const name = "John";
}
console.log(name); // name is not defined
Однако, если мы объявим переменную с помощью var, к ней можно будет получить доступ вне области видимости
if (true) {
var name = "John";
}
console.log(name); // John
Цепочка областей видимости
Если мы создаем область видимости внутри области видимости внутри другой области видимости, мы создаем цепочку областей видимости
Пример
function fnc1() {
//scope 2
return function () {
//scope 3
return function () {
//scope 4
return function () {
//scope 5
};
};
};
}
и каждая область видимости имеет доступ только к переменным, объявленным в области видимости более высокого уровня.
Область видимости 5 имеет доступ ко всем переменным областей видимости 4, 3, 2 и глобальной области видимости
область видимости 4 имеет доступ ко всем переменным областей видимости 3, 2 и глобальной области видимости
и т.д.