递增数字后,JavaScript代码意外结果

时间:2011-03-13 20:16:05

标签: 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.

有人可以帮助我,因为我无法弄清楚我做错了什么!我不明白这本书有哪些来自50!

8 个答案:

答案 0 :(得分:3)

您在这里遇到的问题涉及增量后和预增量。

执行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;

答案 1 :(得分:2)

后增量表达式的结果是变量增加之前的值。

所以这个:

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

答案 2 :(得分:1)

x ++在递送值后增加x:

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

++ x在交付价值之前增加x:

 y = z * ++x   // 5 * 11  

花哨的名字发布和预增量

答案 3 :(得分:1)

您应该了解后增量和预增量运算符之间的区别。

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

变量是后增量操作后的

++,即x在赋值后递增。

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

答案 6 :(得分:0)

示例:

a * (b++)

它与:

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

a * (++b);

是这样的:

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

答案 7 :(得分:0)

首先你有

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

然后你做:

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

y = 50;
x = 11; (because x = x+1)

然后:

y = z * ++x  = 5  * 11 = 55