Javascript 为什么具有预增量的for循环与具有后增量的for循环具有相同的行为?
可以公平地说,每个人都可以使用后期增量来学习循环编写:Javascript 为什么具有预增量的for循环与具有后增量的for循环具有相同的行为?,javascript,for-loop,post-increment,pre-increment,Javascript,For Loop,Post Increment,Pre Increment,可以公平地说,每个人都可以使用后期增量来学习循环编写: for(var i = 0; i < 10; i++) { console.log(i); // 0..9 } for(变量i=0;i
for(var i = 0; i < 10; i++) {
console.log(i); // 0..9
}
for(变量i=0;i<10;i++){
console.log(i);/0..9
}
当我将后增量换成预增量时,我希望如下所示:
for(var i = 0; i < 10; ++i) {
console.log(i); // 1..10
}
for(变量i=0;i<10;++i){
console.log(i);/1..10
}
我的推理是:i
被初始化为0
;当i
小于10时,将执行循环体i
增加到1
,并输入循环的主体<值为1的code>i
打印到consele;再次评估循环的条件;等等
但输出(至少对于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;
而(i<10){
//做事
控制台日志(i);
//以你自己的方式增加我
++i、 //或i++;
}
在后一个示例中,操作顺序为
var i = 0; // obviously
if (i < 10) /* proceed */
console.log(i);
++i;
var i=0;//明显地
如果(i<10)/*继续*/
控制台日志(i);
++一,;
正如您所怀疑的那样,“++”并没有说“跳转队列并以完全不同的顺序执行操作”。是在主体运行之后执行的增量吗?对
看到那些分号了吗?它们的意思是它们是完全不同的表达方式
举个小例子:
var i = 0;
if (i<5)
i++;
console.log(i);
及
啊,既然操作符在同一个表达式中使用,那么我们使用的那一个就很重要了
这基本上就是正在发生的事情。由于它们是不同的表达式,请想象它们在不同的行上运行。更新发生在循环体运行之后。您需要了解循环是如何工作的。当引擎进入循环时,它初始化变量并检查退出条件。一旦它处理了循环中的指令,它就会进行增量,检查退出条件等。这就是为什么使用pre-ore-post-increment不会产生实际效果的原因difference@jeff对于员额增加,这一点很清楚。但对于一个预增量,我的直觉使我误入歧途。谢谢大家的解释。if检查发生在控制台日志之前。增量发生在控制台日志之后。@Tuvia。显然,我的示例并不是在复制循环,而是为了演示,演示了for循环被分成多个语句这一事实的概念。
var i = 0;
if (i<5)
++i;
console.log(i);
var i = 0;
i += i++;
console.log(i);
var i=0;
i+= ++i;
console.log(i);