Javascript вопрос о приоритетах операторов: i = i— + ++ i - PullRequest
0 голосов
/ 16 апреля 2020

Пожалуйста, примите во внимание этот фрагмент кода:

var i = 1;
i = i-- + ++i;

Мое понимание порядка, в котором обрабатываются операторы и операнды, выглядит следующим образом:

  1. i увеличивается на 1 (увеличение до исправления)
  2. i добавляется к i (добавление)
  3. i уменьшается на 1 (уменьшение после исправления)
  4. Значение с правой стороны присваивается i (операция присваивания)

Если мое понимание правильное, то в итоге я получу значение 3. Однако я распечатал результат, используя некоторый онлайн-интерпретатор javascript, и конечное значение i равно 2.

Где я ошибся?

Ответы [ 3 ]

2 голосов
/ 16 апреля 2020
var i = 1;
i = i-- + ++i;

так компилятор go при работе с этим кодом

  1. создаст переменную с именем i
  2. , установив значение i в 1
  3. (rhs первый элемент) принимает значение i (1) значение уменьшения (i теперь 0)
  4. (rhs второй элемент) значение увеличения i (i теперь 1)
  5. установите значение i в rhs (2)
2 голосов
/ 16 апреля 2020

JavaScript всегда вычисляет подвыражения в порядке слева направо, а затем применяет оператор:

// parentheses added for clarity
i = (i--) + (++i); // i = 1

i =   1   + (++i); // i = 0 after i--

i =   1   +   1  ; // i = 1 after ++i

i =       2      ;
0 голосов
/ 16 апреля 2020

Понимание логики c со значениями приоритета:

var i = 1;
i = i-- + ++i;

prefix increment(++i) precedence  = 17
postfix decrement(i--) precedence = 16

addition(+) precedence = 14

i = 1 + 1
i = 2

Более подробную информацию, относящуюся к приоритетам, можно найти в https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

...