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

С учетом этого рассмотрим следующий пример.


           1 1   внешний  блок
           let  х  =  {  color :  "Ыuе"  } ;
           let  у   х ;             1 1   у  и  х    ссылаются  на  тот  же  объект
           let  z  =  3 ;
           {
               1 1   внутренний  блок
               let  х  =  5 ;       1 1   внешний  х  теперь  замаскирован
               console . l o ( x ) ;   1 1   выводит  5
                        g
                                r
                        g
               console . l o ( y  . c olo ) ;  1 1   выводит  "Ы uе";  объект,  на  который
                                    1 1   указывает  у  (и х  во  внеш н ей  области
                                    1 1   видимости) ,  в с е  еще  находится  в  области
                                    1 1   видимости
               y . color  =  " r ed" ;
                        g
               console . l o ( z ) ;   1 1   выводит  3;  z  не  замаскирована
           console . l og (x . c olo ) ;   1 1   выводит  "red" ;   объект  изменяется  во
                            r
                                    1 1   внутренней  области  видимости
                     g
                            r
           console . l o ( y . c olo ) ;   1 1   выводит  "red";  х  и  у  ссылаются  на  тот
                                    1 1   же  объект
                     g
           console . l o ( z ) ;    1 1   выводит  3

                   Маскировку переменных  иногда называют затенением (shadowing)
                  (  т.е. переменная из внешней области видимости попадает в  тень пе­
                  ременной с тем же именем во внутренней области). Мне никогда не
                  нравился этот термин, поскольку тени никогда не скрывают сущнос-
                  ти полностью, только делают их более темными.  Когда переменная
                  маскируется, она полностью недоступна.

          Иерархический характер областей видимости на настоящий момент должен быть
       уже понятен: вы можете ввести новую область видимости, не покидая прежней. Это
       создает цепь областей видимости, определяющих, какие переменные находятся в об­
       ласти видимости: все переменные в  текущей цепи областей видимости находятся
       в области видимости и (пока они не маскируются) вполне доступны.


       Функции, замкнутые выражения
       и  е к сическая область видимости
          л
          До  сих  пор  мы  имели  дело  только  с  блоками,  которые  улучшают  нагляд­
       ность  лексической  области  видимости,  особенно  если  вы  выравниваете  свои
       блоки  отступами.  Функции,  напротив,  могут  быть  определены  в  одном  месте,



                           Функции, замкнутые выражения и лексическая область видимости   1 5 1
   145   146   147   148   149   150   151   152   153   154   155