Посмотрите, понятно ли вам, почему код ниже работает именно так?
var a = 1, b = 1, c, d;
c = ++a; alert(c); // 2
d = b++; alert(d); // 1
c = (2 + ++a); alert(c); // 5
d = (2 + b++); alert(d); // 4
alert(a); // 3
alert(b); // 3
var a = 1, b = 1, c, d;
// префиксная форма сначала увеличивает a до 2, а потом возвращает
c = ++a; alert(c); // 2
// постфиксная форма увеличивает, но возвращает старое значение
d = b++; alert(d); // 1
// сначала увеличили a до 3, потом использовали в арифметике
c = (2 + ++a); alert(c); // 5
// увеличили b до 3, но в этом выражении оставили старое значение
d = (2 + b++); alert(d); // 4
// каждую переменную увеличили по 2 раза
alert(a); // 3
alert(b); // 3