Первоначально я начал писать статью в блоге о подъеме переменных в Javascript, но довольно быстро понял, что сначала мне нужно объяснить область видимости в Javascript. Чтобы полностью понять тему подъема, необходимо понимать масштаб. Итак, вот я и пишу сообщение в блоге о области видимости в Javascript. Давайте начнем!

До ES6 в Javascript было только два типа области видимости:

  • Локальный/функциональный объем
  • Глобальный масштаб

ES6 представил новый тип области действия для Javascript, который

  • Область блока

Прежде чем мы углубимся в различия каждого типа прицела, давайте обсудим, что такое прицел на самом базовом уровне. Область действия по существу определяет, когда и где можно и нельзя обращаться к переменным. Другими словами, «область действия определяет доступность» переменных.

Давайте погрузимся в сложность каждого типа прицела, по одному.

Глобальный масштаб

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

var shape = “circle”;
console.log(shape); // “circle”
function changeShape() {
 shape = “triangle”;
}
changeShape();
console.log(shape); // “triangle”

Локальный/функциональный объем

Когда функция определена, ей доступны все переменные в глобальной области видимости. Функция также имеет доступ к переменным, объявленным внутри нее, которые являются локальными/функциональными. Таким образом, переменная, объявленная внутри функции, относится к нам как локальная переменная и существует только в локальной области/области действия функции.

function exampleFunction() {
 var color = “red”;
 console.log(color); // “red”
}
exampleFunction();
console.log(color); // ReferenceError: color is not defined

Область блока

Область действия блока была введена в ES6 и использует let и const для объявления переменных. Блок конкретно относится ко всему, что находится внутри фигурных скобок {}. Примерами блока могут быть оператор if или функция. Итак, теперь функции — не единственное, что может создавать свою собственную область видимости.

Когда дело доходит до функций, let и const работают аналогично var.

function myFunc() {
 let animal = “dog”;
 console.log(animal); // “dog”
}
myFunc();
console.log(animal); // ReferenceError: animal is not defined

Где область блока становится запутанной

Область блока сбивает с толку из-за того, что одно и то же имя переменной используется дважды. Когда вы используете var для объявления двух переменных (что не является областью действия блока), первое объявление переопределяется.

var food = “pizza”;
if (true) {
 var food = “ramen”;
 console.log(food); // “ramen”
}
console.log(food); // “ramen”

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

let food = “pizza”;
if (true) {
 let food = “ramen”; // “ramen”
}
console.log(food); // “pizza”

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

Я надеюсь, что этот пост в блоге будет полезен для тех из вас, кто плохо знаком с Javascript! Удачного кодирования.

Ресурсы

ES6: var, let и const — битва между областью действия функции и областью действия блока

Понимание подъема в Javascript

Область действия JavaScript

Разница между функцией и областью действия блока в Javascript