Переменные JavaScript

Прежде всего, давайте определим, что такое переменная. Проще говоря, переменная — это то, что хранит значение. Она имеет идентификатор (или имя), который может содержать буквы, цифры и специальные символы. Для того чтобы «объявить» переменную, мы можем использовать три метода: let, var и const.

Как правило, если вы не хотите, чтобы значение вашей переменной менялось на протяжении всего кода, объявляйте ее с помощью const (значение будет оставаться постоянным, понятно?). Это гарантирует, что она не может быть повторно объявлена и не может быть переназначена. Давайте посмотрим на это в действии:

const snack = "ice-cream"

Здесь мы объявили нашу переменную (snack) и присвоили ей значение (ice-cream). Если мы хотим получить значение нашей переменной, мы можем просто выполнить команду snack и получить в ответ ice-cream:

Что произойдет, если мы попытаемся повторно присвоить значение? Давайте посмотрим:

Хмммм, это не нравится. Может быть, мы можем просто повторно объявить значение?

Нет, это тоже не работает!

Что, если мы хотим немного больше гибкости и хотим иметь возможность переназначать значение переменной? Здесь мы воспользуемся переменной let:

Заметьте, мы все равно не сможем повторно объявить значение let, но мы можем его переназначить. В той же ситуации const выдает ошибку.

И самый гибкий из всех, var, может быть как повторно объявлен, так и повторно присвоить свое значение:

Итак, подведем итог: переменным var можно присваивать значение и повторно объявлять; переменным let можно присваивать значение, но не повторно объявлять; переменным const нельзя ни повторно присваивать значение, ни повторно объявлять.

Но это не единственные различия; они также различаются по области видимости, или, по сути, по их доступности для использования в различных частях кода. Здесь мы рассмотрим два типа области видимости: глобальную и локальную.

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

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

Важно отметить, что в JavaScript переменная может использоваться и без объявления, то есть мы не будем использовать var, let или const для ее объявления. Если переменная используется без объявления, она автоматически становится глобальной переменной:


Мы также должны упомянуть о том, что называется областью видимости блока. Блок — это, вообще говоря, все, что заключено в фигурные скобки; это могут быть циклы for или while, оператор if и т.д. Блочная область видимости означает объявление переменной внутри этих фигурных скобок. Именно в рамках концепции блочной области видится разное поведение наших трех переменных.

Когда речь идет о переменной var, она глобально масштабируется, если мы объявляем ее вне функции, и локально (или функционально) масштабируется, если мы объявляем ее внутри функции. Она не является блочной! Это означает, что если мы объявляем переменную с помощью var внутри блока кода, мы можем так же легко получить к ней доступ вне этого блока кода, на уровне функции:

Как мы видим, у нас нет проблем с распечаткой значения переменной «snack» (которая была определена внутри блока кода) как внутри блока, так и за его пределами. Это, а также тот факт, что мы можем как повторно присваивать, так и повторно объявлять ее значение, потенциально может создать сложности и ошибки в нашем коде, поэтому const и let обычно предпочтительнее var.

Видите ли, в отличие от var, и const, и let фактически уважают область видимости блока; если мы объявим переменную с помощью этих двух переменных внутри блока кода, мы не сможем получить к ней доступ за пределами фигурных скобок, ни на уровне функции, ни на глобальном уровне. Это может открыть гораздо больше возможностей для нашего кода! Давайте посмотрим, как ведет себя const в той же самой ситуации, которую мы только что рассмотрели выше:

Как мы видим, сработал только console.log внутри блока кода. Аналогичное поведение мы можем наблюдать и с let:

Подводя итог, можно сказать, что основные различия в области видимости: переменные let и const являются блочными, а переменные var — нет (только глобально или функционально). Эти различия, а также различия в их способности быть повторно объявленными и переназначенными, открывают совершенно разные возможности для каждой из этих переменных при написании кода.

Спасибо за прочтение!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *