有人可以解释为什么警报在 postfix 下仍然显示 5 吗?我知道前缀标识最后一次迭代是假的,但是使用后缀,它仍然会返回 i 作为 5。
// Prefix Code:
let i = 0;
while (++i < 5) {
alert(i);
}
// Postfix code:
let i = 0;
while (i++ < 5) {
alert(i);
}
有不同的输出。带前缀,输出为 1, 2, 3, 4
使用后缀,输出为 1, 2, 3, 4, 5
我无法理解为什么 postfix 输出会返回 5。
为了清楚起见,前缀运算符
++i
递增然后输出变量,后缀运算符i++
输出然后递增变量。
对于前缀码,
++i
在递增后输出i
本身的值,因此i
永远不会完全达到5
。
它输出
1, 2, 3, 4
。第一个是 1
,因为 i
从 0
开始递增。
对于后缀代码,
i++
输出的是i
小一的值,所以即使i
通过递增达到5
,它实际上输出的是4
。由于输出的 4
小于 5
,所以最终语句被执行。
最后一条语句执行时
i
的值为 5
,因此打印 i
。
然后
i++
将为 5
打印 i = 6
,以便停止执行。
示例:
let i = 4;
alert(i); // 4
alert(i++); // 4, even though i is now 5
alert(i); // 5
alert(i++); // 5, even though i is now 6
alert(i); // 6
阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment
如果使用 后缀,在操作数之后使用运算符(例如 x++),增量运算符将递增 并返回递增之前的值。
如果使用 前缀,操作数之前有运算符(例如,++x),则增量运算符会递增 并返回递增后的值。
因此,在后缀中,
while
条件中的比较是与 4 完成的,但 alert
中的值是 5