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代码>,因此您只需编写更适合自己的样式。