Почему a++ + ++a работает не так?
1. Выполняем a++ (a=2, вернулось 1)
2. Выполняем ++a (a=3, вернулось 3)
3. Выполняем вернулось_1 + вернулось_2 (а=3, вернулось 1+3=4)
Все вроде ок.
Как это работает в JS:a++ + ++a
1. a++ == 1 (a == 2)
2. ++a == 3 (a == 3)
3. 1 + 3 == 4 (a == 3)
Ваша ошибка здесь:затем прибавить к нему 2
Затем прибавить к нему (a + 1 == 2) еще 1 (2 + 1 == 3) и прибавить к предыдущему результату (a++ == 1)Кстати, никогда не делайте так. Это значит НИКОГДА. Может, это не UB в JavaScript, но это UB в C++ и т. д.
Может быть, не все браузеры работают именно так, как в примере. Да и когда переходишь на другой язык, часто продолжаешь использовать особенности старого.
Например, в C++ + - не sequence point. Грубо говоря, это значит, что если перед и после точки следования меняется одна переменная, результат не определен. Например, это может быть 4, как в JS (идем слева направо), это может быть 5 (идем справа налево):a++ + ++a
1. ++a == 2 (a == 2)
2. a++ == 2 (a == 3)
3. 2 + 3 == 5 (a == 3)
...это может быть 3:a++ + ++a
1. a++ == 1 (a == 1)
2. ++a == 2 (a == 1)
3. 1 + 2 == 3 (a == 1)
4. a++; ++a (a == 3)
И так далее.