Page 155 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 155
переменных. Поэтому в данном случае маскировки переменных не происходит так, как
это делается с помощью ключевого слова let. В данном примере есть только одна пе
ременная х, даже при том что в блоке есть второе определение с ключевым словом var.
Это снова то, чего я не рекомендую делать во избежание возможных ошибок.
Случайный читатель (особенно знакомый с другими языками программирования)
может посмотреть на этот пример и резонно предположить, что автор намеревался
создать новую переменную х в области видимости блока, созданного оператором i f ,
чего на самом деле не было.
Если вы задались вопросом "Почему ключевое слово var позволяет делать такие
запутанные и бесполезные вещи?': то вы теперь понимаете, почему появилось клю
чевое слово let. Конечно, вы можете и дальше использовать ключевое слово var от
ветственно и однозначно, но при этом случайно можно очень легко написать код,
который окажется двусмысленным и неясным. В спецификации ЕSб не могли просто
"исправить" ключевое слово var, поскольку это нарушило бы работоспособность су
ществующего кода; поэтому было введено ключевое слово let.
Я не могу придумать пример испопьзования ключевого слова var, который нельзя
было бы переписать лучше или яснее с использованием ключевого слова let. Други
ми словами, ключевое слово var не имеет преимуществ перед ключевым словом let,
и многие в сообществе JavaScript (включая меня самого) полагают, что ключевое сло
во let в конечном счете полностью заменит ключевое слово var (и даже возможно,
что определения с ключевым словом var в конечном счете устареют).
Итак, зачем же нужно изучать ключевое слово var и механизм подъема? По двум
причинам. Во-первых, спецификация ЕSб не будет общепринята еще на протяжении
некоторого времени, а значит, код придется транскомпилировать в ESS, и, конечно,
существует много кода, написанного в ESS. Поэтому в течение некоторого времени
еще будет важно понимать, как работает ключевое слово var. Во-вторых, объявле
ния функции также поднимаются, что подводит нас к следующей теме.
П о дъем фу к ций
н
Подобно объявлениям переменных с использованием ключевого слова var, объ
явления функций поднимаются к началу их области видимости. Это позволяет вы
зывать функции прежде, чем они будут объявлены.
(
f ) ; 1 1 выводит "["
(
function f ) {
console . l o ( ' f ' ) ;
g
Обратите внимание, что функциональные выражения, которые присваиваются
переменным, не поднимаются. Они просто подчиняются правилам областей види
мости для переменных, как показано ниже.
1 5 6 Глава 7. Область видимости

