JavaScript代码在递增数字后出现意外结果

JavaScript代码在递增数字后出现意外结果,javascript,Javascript,我正在努力解决这个问题: x = 10; y = 0; z = 5; y = z * x++ y = z * ++x 我正在阅读的maunal指令(500页长)告诉我,x++问题的答案是: y = 50 and x = 11. 我知道如何获得x++所有你需要做的就是增加1的增量 x = x + 1. 谁能帮帮我,因为我不知道我做错了什么!我不明白这本书是从哪里来的 x++在价值交付后增加x: y = z * x++ // 5 * 10 // and 10 become 11

我正在努力解决这个问题:

x = 10; y = 0; z = 5;

y = z * x++

y = z * ++x
我正在阅读的maunal指令(500页长)告诉我,x++问题的答案是:

y = 50 and x = 11. 
我知道如何获得x++所有你需要做的就是增加1的增量

x = x + 1.

谁能帮帮我,因为我不知道我做错了什么!我不明白这本书是从哪里来的

x++在价值交付后增加x:

 y = z * x++   // 5 * 10  // and 10 become 11 after operation
 y = z * ++x   // 5 * 11  
++在价值交付前增加x:

 y = z * x++   // 5 * 10  // and 10 become 11 after operation
 y = z * ++x   // 5 * 11  

奇特的名称后增量和前增量

您应该理解后增量运算符和前增量运算符之间的区别

y=z*x++
的情况下,x如果首先在表达式中使用,然后递增。因此,表达式的值变为
y=5*10
,之后x的值增加到11


在另一种情况下,使用预增量运算符。所以它首先递增,然后使用。因此,在这种情况下,值变为55。

这是增量后运算符。 x++使用x的值,然后增加它
++x(递增前)递增x,然后使用它

递增后表达式的结果是变量递增前的值

因此:

y = z * x++;
大致相当于:

y = z * x;     // y = 50
x = x + 1;     // x = 11 (the increment is done afterwards)
另一方面,增量前操作的计算结果为增量后的值。因此:

y = z * ++x;
大致相当于:

x = x + 1;     // x = 11  (the increment is done first)
y = z * x;     // y = 55

你在这里遇到的问题是关于增量后和增量前

在执行
x++
时,您正在进行后期递增。。。这意味着只有在对语句求值之后才会进行增量

因此,考虑到以下代码:

x = 10; y = 0; z = 5;

y = z * x++;
JavaScript实现了以下功能:

x = 10; y = 0; z = 5;

y = z * x++;

// Ignore Post-Increment, Evalutate
y = z * x;
y = 5 * 10;
y = 50;

// Now Increment x - POST-INCREMENT
x = x + 1;
x = 10 + 1;
x = 11;
执行
++x
时,您正在预递增。。。这意味着增量将在对语句求值之前发生:

x = 10; y = 0; z = 5;

y = z * ++x;

// Do Pre-Increment
x = x + 1;
x = 10 + 1;
x = 11;

// Evaluate
y = z * x;
y = 5 * 11;
y = 55;

变量后的
++
是增量后操作,即赋值后,
x
递增

换句话说,y计算为50,然后x递增。

示例:

a * (b++)
这与:

a * b;
b = b + 1; //POST increment

但是

是这样的:

b = b + 1; //PRE increment
a * b;
首先你有

x = 10;
y = 0;
z = 5;
然后你会:

y = z * x++  = 5 * 10 = 50
之后你会得到:

y = 50;
x = 11; (because x = x+1)
然后:


这一定是一个重复的问题…假设它是++x,那么我的答案是什么?好的,这是有意义的。我明白我该怎么做了。我必须做10+1=11,然后乘以5。y=55和x=11还是它们各自需要有自己的变量?你可以按照这里所有人的建议在一行中进行几次赋值,因为'z*x++`(一行)与两行代码相同:
z*x
x=x+1,因此您只需编写更适合自己的样式。