Qual o valor de J? pré-incremento, pós-incremento, pré-decremento e pós-decremento?

Galera estou iniciando com Javascript e bem no início fiquei com essa dúvida:

Qual seria o valor final de J? e porque?

Fiz exatamente esse pedacinho e executei e o variável J que deu 22 me confundi mais ainda. Porque nas minhas contas ficaria 21.

var i = 10;

var j = ++i + i--;
1 curtida

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.

Para resumir

++i = 11


11 + 11 = 22


e por fim

i-- = 10


Resultado final é J 22, e o I vale 10.

Lógica:

| Decremento pré-fixado     | --a
| Decremento pós-fixado	    | a--

| Incremento pré-fixado     | ++a
| Incremento pós-fixado	    | a++

Outra explicação:

Segundo, Dantas Cleber (http://www.linhadecodigo.com.br/artigo/1007/serie-aprenda-csharp-operadores-em-csharp.aspx):

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.

Referencia: http://www.linhadecodigo.com.br/artigo/1007/serie-aprenda-csharp-operadores-em-csharp.aspx, Autor Cleber Dantas

opa obrigadão!!