Почему постфиксный инкримент (a++) выполняется после префиксного (++a)?

Всем привет! Небольшие непонятки по приоритетам между i++ и ++i. Согласно информации с сайта https://developer.mozilla.org/ru/docs/Web/JavaScri... у постфиксного инкремента приоритет выше над префиксным. Но по моему примеру не сходится:

var a = 1;
a = ++a + a++ * a
/*2 + 2 * 3 = 8 - как считает интерпретатор, т.е. префикс выполнил раньше постфикса, даже несмотря на то что у него приоритет ниже*/
/*3 + 1 * 3 = 6 - как я считаю исходя из приоритетности пост- и префиксных инкрементов*/
alert(a);

В чем тут подвох?

var a = 1;

alert(++a - a++);// Возвращает 0, хотя исходя из приоритетов должно быть 2.

Получается если в выражении есть постфиксные инкременты и префиксные инкременты, то они приравниваются к одному приоритету и выполняются по очереди слева на право?
  • Вопрос задан
  • 612 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Приоритет — это понятие из синтаксиса. Как будут расставлены скобки в ++a++: (++a)++ или ++(a++)?
То же самое с ассоциативностью: a+b+c = (a+b)+c или a+(b+c)? Особенно если один из плюсов даст переполнение или потерю точности.

Порядок выполнения — понятие из семантики, и, вероятно, для двухместной операции + первый аргумент вычисляется раньше второго. Думаю, в JS так, хотя простой гуглёж ничего не дал. В Java и C# точно так. А вот в Си это совершенно не обязательно, аргументы может вычислять в любом порядке, который понравится компилятору.

В математике нет побочных эффектов, можно вычислять в порядке приоритета, и получишь правильный результат. А в программировании есть ожидаемый (и не сильно меняющийся при редактировании выражений) порядок побочных эффектов и поменьше регистров для хранения промежуточных результатов. Компилятор, какой бы он ни был умный, всё равно дурак, и стандартный порядок желательно придумать такой, чтобы всё как-то работало и без оптимизаций.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы