EСМАScript 6. Блочная видимость
- Details
- 10 Март 2016 11:09
Традиционно, объявление переменных было одной из необычных особенностей JavaScript. В большинстве C-подобных языков, создание переменной происходит в том месте, где она объявлена. Однако, в JavaScript это не так. Где Ваши переменные будут созданы, зависит от того, как Вы их объявили, и ECMAScript 6 предлагает возможности, что бы сделать контроль области видимости проще. В этой статье показано, почему классический var может ввести в заблуждение, вводится понятие блочной видимости в ECMAScript 6, а также приведены некоторые практические советы.
Объявление var и подъем
Объявление переменных с использованием var
обрабатывается также, как если бы они были объявлены в верхней части функции (или глобальной области видимости, если объявление происходит вне функции) независимо от того, где происходит фактическое объявление. Эта особенность называется подъем. Для демонстрации того, как подъем работает, рассмотрим следующее определение функции:
function getValue(condition) { if (condition) { var value = "blue"; // другой код return value; } else { // переменная существует со значением undefined return null; } // переменная существует со значением undefined }
Если Вы не знакомы с JavaScript, то могли бы ожидать, что переменная value будет создана, только если переменная condition примет значение true. На самом деле, переменная value будет создана в любом случае. За кулисами, движок JavaScript изменил функцию getValue, следующим образом:
function getValue(condition) { var value; if (condition) { value = "blue"; // другой код return value; } else { return null; } }
Объявление value поднимается наверх и происходит во время инициализации функции. Это означает, что переменная value по прежнему доступна внутри блока else. Так как переменная доступна в блоке else, то она будет иметь значение undefined, потому что она не была инициализирована.
Часто новичкам в JavaScript требуется некоторое время, чтобы привыкнуть к подъему объявления переменных, и непонимание этого уникального поведения может в итоге привести к ошибкам. По этой причине, ECMAScript 6 предлагает видимость уровня блока, чтобы сделать более удобным контроль жизненного цикла переменной.
Объявление уровня блока
Объявление уровня блока - это объявление переменной, которая недоступна за пределами области видимости блока. Объявление уровня блока создается:
* внутри функции;
* внутри блока (обозначенного символами {
и }
)
Блочная область видимости работает во множестве C-подобных языков, и введение объявления уровня блока в ECMAScript 6 предназначено внести ту же гибкость (и единообразие) в JavaScript.
Объявление let
Синтаксис объявления let
такой же, как и синтаксис var
. Вы можете просто заменить var
на let
для объявления переменной, но ограничится и область видимости переменно текущим блоком кода (есть некоторые другие тонкости, которые обсудим позже). Поскольку let
объявления не поднимаются наверх ограниченного блока, вы можете всегда размещать let
объявления вначале блока, что бы они были доступны во всем блоке. Пример использования:
function getValue(condition) { if (condition) { let value = "blue"; // другой код return value; } else { // value здесь не существует return null; } // value здесь не существует }
Эта версия функции getValue ведет себя гораздо ближе к тому, как можно было ожидать этого в других C-подобных языках. Поскольку переменная value объявлена с помощью let
вместо var
, то объявление не поднимается наверх определения функции, а переменная value будет уничтожена, как только поток выполнения выйдет за пределы блока.
- Tags
- Author
- Андрей Рачков
Авторизуйтесь, чтобы оставить комментарий