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

Догадливый читатель мог бы подумать: "Хорошо, я создам в глобальной области
       видимости одну функцию и сведу мои глобальные  переменные к одной функции!"
       Прекрасно, но только теперь вы просто перенесли проблему на один уровень вниз.
       Все, что будет объявлено в пределах этой функции, будет доступно для всего, что
       вызывается в этой функции ... что едва ли лучше глобальной области видимости!
          Подведем черту: у  вас,  вероятно,  будет нечто  в  глобальной  области  видимо­
       сти, и это не обязательно плохо, а вот пытаться избегать следует того, что зависит
       от глобальной области видимости. Давайте рассмотрим простой пример: отслежива­
       ние информации о пользователе. Ваша программа отслеживает имя и возраст поль­
       зователя, а также имеет несколько функций, которые работают с этой информацией.
       Это можно сделать, используя глобальные переменные.
       let  name  =  " I ren " ;    / /  глобальная
                       a
       let  age  =  2 5 ;     / /  глобальная

       function  greet  )
                     (
           console . l o ( ' Hello,  $  ( name } !  ' )  ;
                     g
       func i on  getBirthYear ( )
           t
           return  new  Date ( )   . g etFullYear ( )   - age ;

          Проблема этого  подхода в  том,  что  наши  функции жестко зависят от контекста
       (или области видимости), из которого они вызываются. Любая функция (в любой час­
       ти вашей программы) может изменить значение name  (случайно или преднамеренно).
                            "  "
                       "
       Идентификаторы  name и  age" (имя и возраст) весьма распространены и вполне мо­
       гут использоваться в другом месте по другим причинам. Поскольку функции greet
       и getBirthYear зависят от глобальных переменных, они, возможно, безосновательно
       полагают, что остальная часть программы использует name и age правильно.
          Лучше поместить всю информацию о пользователе в один объект.
       let  user  =  (
           name   =  " I rena " ,
           age  =  2 5 ,
       } ;
       function  greet ( )    (
                     g
           console . l o ( ' Hello,  $ ( u ser . name }  !  ' ) ;
       func i on  getBirthYear ( )
           t
           return  new  Date ( )   . g etFullYear ( )   - user . a ge ;

          В этом простом примере мы сократили количество идентификаторов в глобаль­
       ной области видимости только на один (мы избавились от name и age, но добавили
       user), но что если у нас будет 10 пользователей ... или 100?


       148     Глава 7. Область видимости
   142   143   144   145   146   147   148   149   150   151   152