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

Первая строка - это оператор (statement) объявления; мы объявпяем перемен­
       ную х. Конечно, мы можем объединить эти две строки, но это затруднит данное об­
       суждение.  Интересна также вторая строка: в ней фактически объединены два вы­
       ражения.  Первое выражение (expression), 3  * 5 ,   - это умножение,  возвращающее
       результирующее значение 1 5 .   Второе выражение - это присваивание значения  1 5
       переменной х. Обратите внимание, что присваивание - это само по себе выражение,
       а выражение, как известно, возвращает значение. Так что же возвращает выражение
       присваивания? Как оказывается, выражения присваивания возвращают то значение,
       которое присваивают. Таким образом, не только переменной х будет присвоено зна­
       чение 15, но и все выражение возвратит значение 15. Поскольку присваивание - это
       выражение, которое возвращает значение, мы могли бы, в свою очередь, присвоить
       его другой переменной. Считайте следующее (очень глупым) примером.
       let  х,  у ;
       у   =  х  =  3  *  5 ;
                                                                 1
          Теперь есть две переменные, х и у, и обе содержат значение  5 .   Мы в состоянии
       сделать это потому, что и умножение, и присваивание являются выражениями. Когда
       в коде JavaScript встречается такое объединенное выражение, как это, оно разделяет­
       ся и вычисляется по частям следующим образом.
       let  х,  у;
       у   х  =  3  *  5 ;   / /  исходный  оператор
       у   х  =  1 5 ;    11  вычисляется  выражение  умножения
       у   1 5 ;      11  вычисляется  первое  присваивание;  теперь  х  имеет
                      1 1   значение  1 5 ,   а  у  в с е  еще  undefined
       1 5 ;          11  вычисляется  второе  присваивание;  у  теперь  имеет
                      1 1   значение  15,  результат  - 1 5 ,   который  не  используется
                      11  или  присваивается  чему-нибудь  еще .  Здесь  от  этого
                      11  заключительного  значения  просто  отказываются
          Вполне естественен вопрос - "Как JavaScript узнает, что выполнять выражения
       следует именно в таком порядке?" Вполне резонно полагать, что первым будет вы­
       полнена операция у  =  х, присваивающая переменной у значение undefined, а за­
       тем будет  вычислен результат умножения  и наконец - операция присваивания,
       оставляющая у значение undefined,  х а    - 1 5 .   Порядок, в котором JavaScript обраба­
       тывает выражения, зависит от приоритета операторов (operator precedence), и мы
       рассмотрим его в данной главе.
          Большинство выражений, таких как умножение и присваивание, являются опера­
       торами-выражениями. Таким образом, выражение умножения состоит из оператора
       умножения (звездочка) и двух операндов (умножаемых значений, которые сами могут
       быть выражениями).
          Операторами не являются всего два выражения: определение идентификатора
       (т.е. имен переменных и  констант) и литеральное выражение. Это вполне очевид­
       но, так как переменные, константы и литералы сами являются выражениями. По­
       нимание этого позволяет вам увидеть, как с помощью выражений поддерживается


       1 0 6    Глава 5. Выражен и я и операторы
   102   103   104   105   106   107   108   109   110   111   112