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

вызываете функцию, ее аргументы получают значения,  которые вы передаете, а не
       сами переменные. Рассмотрим следующий код.
                 (
       function  f  х )    {
           сопsоlе . l о ( ' Внутри  f :   х=$ { х } ' ) ;
                    g
           х  =  5 ;
                    g
                                                         я
           console . l o ( ' Bнyтpи  f  :   х=$ { х }    (после  присваивани ) ' ) ;
       let  х  =  З ;
       console . l og  ( ' Пepeд  вызовом  f :   х=$ { х }   ' ) ;
       f ( х ) ;
                 g
       console . l o ( ' Пocлe  вызова  f  :   х=$ { х }  ' ) ;
          Если вы запустите этот пример, то увидите

       Перед  вызовом  f  :   х=З
       Внутри  f :   х=З
       Внутри  f :   x=S  ( п осле  присваивания)
       После  вызова  f:  х=З
          Здесь важно то, что присваивание значения х в функции не затрагивает перемен­
       ную х вне функции; дело в том, что это две разные сущности, имена которых случай­
       но совпали.
          Всякий раз, когда мы  присваиваем аргумент функции, это никак не влияет ни
       на какие переменные за пределами функции. Т е м не менее вполне возможно изме­
       нить тип объекта (object type) в функции способом, который изменит сам объект,
       видимый за пределами функции.

                 (
       functioп  f  о )    {
           o . m essage  =  ' И зменено  в  f  (предыдущее  значение :  1 $ { 0 . m e s sage } ' )   ' ;
       let  о  =  {
           message :  " Н ачальное  значение "
       } ;
                                                        e
       console . l o ( ' Пepeд  вызовом  f  :   o . m essage=" $ { o . m e s sag } "  ' ) ;
                 g
       f  о ) ;
        (
                 g
                                                       e
                                           =
       console . l o ( ' Пocлe  вызова  f  :   o . m essage " $ { o . m essag } "  ' ) ;
          Это даст следующий результат.
       Перед  вызовом  f :   о  . m е s s аgе=" Н ачальное  значение"
       После  вызова  f:  о . m е s s аgе= " И зменено  в  f  ( п редьщущее  значение :
       ' Н ачальное  значение ' ) "
          В этом примере мы видим, что внутри функции f был изменен объект о, и эти
       изменения повлияли на объект о за пределами функции. Это выявляет основное раз­
       личие между базовыми типами и объектами. Базовые типы не могут быть изменены
       (можно изменить только значение переменной базового типа, но само базовое значе­
       ние при этом не изменяется). Объекты, напротив, могут быть изменены.


       1 3 2    Глава 6. Функции
   127   128   129   130   131   132   133   134   135   136   137