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

Но мы могли бы добиться большего:  наши функции greet и  getBirthYear все
       еще зависят от глобального объекта user, который может быть изменен как-то еще.
       Давайте улучшим эти функции таким образом, чтобы они не зависели от глобальной
       области видимости.
       function  greet ( u ser)
           console . l o ( ' Hello,  $  { user . n am } !  ' ) ;
                                        e
                     g
       funct ion  getBirthYear (user)  {
           return  new  Date ( )   . g etFullYear ( )   - user . age ;


          Т е перь наши функции могут быть вызваны из любой области видимости, и поль­
       зователь им передается явно (узнав о  модулях и объектно-ориентированном про­
       граммировании, мы увидим лучшие способы решения этой проблемы).
          Если бы все программы были так просты, то едва ли имело бы значение, исполь­
       зуем мы глобальные переменные или нет. Но когда ваша программа насчитывает ты­
       сячи  (или сотни тысяч) строк, вы не можете помнить все области видимости сразу
       (или даже только те, что находятся на экране). Поэтому становится критически важ­
       но не зависеть от глобальной области видимости.


       Область видимости блока

          Ключевые слова let и const объявляют идентификаторы в области видимости
       блока (Ьlock scope). В главе 5  упоминалось, что блок - это список операторов, за­
       ключенный в фигурные скобки. Поэтому, под областью видимости блока подразуме­
       ваются только те идентификаторы, которые доступны в пределах блока.
                 g
                              м
       console . l o ( ' п epeд  блоко ' ) ;
       {
                                  а
           console . l o ( ' внyтpи  блок ' )  ;
                    g
           const  х  =  3 ;
           console . l og ( x ) :  / /   выводит  З
       console . l o ( ' з a  пределами  блока ;  х=$ { х } ' ) ;    //  ReferenceError :  х  н  е  определена
                 g
          Это автономный блок (standalone Ыосk): обычно блок является частью оператора
       управления потоком, такого как i f   или  for, но это вполне допустимый синтаксис,
       блок может быть и автономным. Переменная х определяется в блоке, поэтому по за­
       вершении блока она выходит из области видимости и считается неопределенной.
                  В главе 4 упоминалось, что автономные блоки не очень часто приме­
                  няются на практике; они используются для контроля областей в иди -
                  мости (как мы увидим в этой главе), но это редко необходимо. Одна­
                  ко они очень удобны для объяснения действия областей видимости,
                  вот почему мы используем их в этой главе.


                                                         Область видимости блока   1 4 9
   143   144   145   146   147   148   149   150   151   152   153