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. Область видимости
   150   151   152   153   154   155   156   157   158   159   160