为什么具有预增量的循环与具有后增量的循环具有相同的行为
Why have for-loops with pre-increment the same behaviour as those with post-increment?
可以公平地说,每个人都学习使用后增量为循环编写:
for(var i = 0; i < 10; i++) {
console.log(i); // 0..9
}
当我把后增量换成前增量时,我会期望以下内容:
for(var i = 0; i < 10; ++i) {
console.log(i); // 1..10
}
我的推理是:i
被初始化为0
;当CCD_ 3小于10时将执行循环的主体;将CCD_ 4递增到CCD_;值为CCD_ 7的CCD_;再次评估循环的条件;等
然而,输出(至少对于Chrome中的JavaScript)与后增量相同:0..9
。为什么?主体运行后是否执行增量?
for循环的最后一部分只发生在每个循环的端。
所以++i
和i++
在这种情况下基本上做相同的事情。
操作顺序:
var i = 0;
while (i < 10) {
// do stuff
console.log(i);
// increment i in your own way
++i; // or i++;
}
在后一个例子中,操作序列是
var i = 0; // obviously
if (i < 10) /* proceed */
console.log(i);
++i;
"++"并没有像你所怀疑的那样说"插队并以完全不同的顺序进行操作"。
是否在主体运行后执行增量 是的。
看到那些分号了吗?它们的意思是它们是完全不同的表达方式。
举个小例子:
var i = 0;
if (i<5)
i++;
console.log(i);
和
var i = 0;
if (i<5)
++i;
console.log(i);
(这些例子并没有复制循环的功能。)您可以看到,两者的答案都是一样的,因为就像for
循环一样,它们是完全独立的表达式。
现在,如果你有:
var i = 0;
i += i++;
console.log(i);
和
var i=0;
i+= ++i;
console.log(i);
啊,由于运算符是在相同的表达式中使用的,那么我们使用的运算符很重要!
这基本上就是正在发生的事情。既然它们是不同的表达方式,想象一下它们在不同的线上运行。
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 为什么JavaScript在for循环为3时向所有4发出警报
- 为什么要返回'这'在导致循环的JavaScript原型中
- 为什么我的While循环不起作用
- 为什么AngularJS在每个摘要循环上都执行函数
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- 为什么这个For循环会使浏览器实验室崩溃
- 为什么我使用javascript获得了一个无限的for循环
- 为什么我在下面的..of循环中得到意外令牌
- 为什么这个while循环不能使用AND逻辑运算符
- 为什么ng中的自定义指令在循环完成后重复运行
- 为什么这会造成一个无休止的循环并使我的浏览器崩溃
- 为什么不'当循环停止时
- JavaScript:为什么这个循环的优化使它变慢了
- 在 for 循环中,为什么 i++ 在第二次使用后变为 1
- 带有foo.js和foo.js.coffee(空)的Rails资产管道导致js循环.为什么?
- Javascript函数保持指数级循环.为什么
- for循环为什么以及何时忽略具有html集合的某些项
- jQuery函数循环:为什么夏奇拉在陌生人吻她时重复吻
- 美元.进入循环:为什么函数在递增之后执行