如果我用一段时间做一个简单的循环,它会在第一个循环之后评估我的++
运算符,这是否意味着我的while运算符会使一个小范围保存我的i
并在它完成之后评估它应用++
运算符吗?为什么这个操作符会发生这种情况,也会发生在--
上,但是不能用简单的求和i + 1
?
var i = 0;
while(i++ < 1) { console.log(i) }
我的输出是
1
var i = 1;
while(i-- > 1) { console.log(i) }
我的输出是
0
var i = 0;
while(i + 1 < 1) { console.log(i) }
我的输出是
undefined
答案 0 :(得分:2)
i++
首先评估然后递增。
++i
首先递增,然后评估它所处的表达式。
var i = 0;
while(i++ < 1) { console.log(i) }
首先你得到0&lt; 1,它增加,进入循环并打印为1. console.log()
运行一次。下一次迭代将比较返回false的1 < 1
。请注意i
最后是2
,因为第二次比较会再次增加它。
var i = 1;
while(i-- > 1) { console.log(i) }
这里评估为1&gt; 1.您将不会获得console.log,但它将为0,因为它在评估后会减少。
var i = 0;
while(i + 1 < 1) { console.log(i) }
此处增量立即完成,因此您得到的1 < 1
不会被评估为true,因此您不会进入循环。 <{1}}最终应为i
,因为它未被修改。
答案 1 :(得分:1)
对于第一个陈述,执行顺序为:
i
(当前为0)&lt; 1?如果是,请增加i
并输入循环,else
增量i
。i
(1)第二个是大致相同的交易,但你的最终陈述显然永远不会执行。我们取零,加1,然后比较为1.因此,你的陈述相当于while (1 < 1)
,这显然是不正确的。
答案 2 :(得分:0)
我认为你让i++
和++i
感到困惑(这不是因为循环):
i++
评估为i,然后递增i ++i
递增i,然后评估为i 一些例子:
var i = 0;
console.log(i++); // ⇒ 0
console.log(i); // ⇒ 1
i = 0;
console.log(++i); // ⇒ 1
console.log(i); // ⇒ 1
i = 1;
console.log(i++); // ⇒ 1
console.log(i); // ⇒ 2
您可以在此处找到更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_()