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. Выражен и я и операторы

