Só lembrando que isso não é só em Javascript, mas, linguagens baseadas em C tem esses operadores:
Quando se executa ++10 é como se fosse 10 + 1 que no caso é 11 e o número 11 já é somado com o restante da sentença matemática, porque o ++ é antes ou seja, soma antes e dá o valor.
Continuando a sentença o último valor de i é 11 e o sinal de – vem depois, ou seja, depois que acabar a sentença o valor de i volta a ser 10 (11 - 1), mas, antes foi somado 11 + 11 que é 22.
Tanto o operador de incremento quanto o operador de decremento tem duas formas de serem aplicados: prefixo e sufixo.
Prefixo à O operador é digitado antes do nome da variável
Ex:
int X = ++Y;
Sufixo à O operador é digitado depois do nome da variável
Ex:
int X = Y++;
O que ocorre é que quando estamos atribuindo um valor a uma variável usando prefixo, ou seja, algo do tipo = ++ você esta dizendo para que a variável2 seja incrementada e logo depois seja atribuído o seu valor a variável1.
Exemplo:
int x = ++y;
Vamos imaginar que a variável y vale 2 e que a variável x vale 0 (zero), como estamos usando o prefixo neste caso a variável y será incrementa em 1, ou seja, agora y vale 3 e logo em seguida o valor de y é atribuído a variável x que agora também vale 3.
No caso de usarmos o sufixo primeiro o valor de y seria passado para a variável x, ou seja, x valeria 2 e em seguida y seria incrementado assim y agora vale 3.