Page 153 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 153

} )   ( ) ;
       f  ) ;  / /  "  раз (а) . "
        (
       f ( ) ;  / /  "Меня  вызывали  2  раз (а) . "
       1 1 "  .
          Поскольку переменная count надежно защищена в IIFE, нет никакого способа из­
       менить ее из вне: у функции f всегда будет точный подсчет количества раз, когда она
       была вызвана.
          Хотя использование переменных из  области видимости блока в ЕSб несколько
       снизило потребность в  IIFE, последнее все еще весьма популярно и полезно, когда
       нужно создать замкнутое выражение и возвратить нечто из него.


       Область видимости функции и механизм
       подъема объявл н и й
                              е
          До введения в  ЕSб ключевого  слова  let переменные объявлялись с ключевым
       словом var и имели всю область видимости функции (function scope) (глобальные
       переменные, объявленные с ключевым словом var вне функции, имеют то же по­
       ведение).
          Когда вы объявляете переменную с ключевым словом let, она не будет существо­
       вать в коде до момента ее объявления. Когда вы объявляете переменную с ключевым
       словом var, она будет доступна повсюду в текущей области видимости". даже перед
       ее оператором объявления. Прежде чем мы рассмотрим пример, запомните, что есть
       различие между переменной, которая не объявлена, и переменной, которой присво­
       ено значение undefined. Необъявленные переменные приводят к ошибке, тогда как
       переменные, которые существуют, но имеют значение undefined, - нет.
             r
       let  va l ;
       let  var2   undef ined;
       varl ;        / /  undefined
         r
       va 2 ;        / /  undefined
       undefinedVar ;  / /   ReferenceError :  undefinedVar  не  определена
          При использовании ключевого слова  let вы получите ошибку, если попытаетесь
       обратиться к переменной до ее объявления.
       х  ;       / /   ReferenceError :  х  не  определена
       let  х  =  3 ;   / /  мы  никогда  не  дойдем  сюда  - ошибка  остановит  выполнение  п р ограммы
          К переменным, объявленным с ключевым словом var, напротив, можно обра­
       щаться прежде, чем они будут объявлены.
       х;         / /  undefined
       var  х  =  3 ;
       х  ;       / /   3



       1 5 4    Глава 7. Область видимости
   148   149   150   151   152   153   154   155   156   157   158