为什么具有预增量的循环与具有后增量的循环具有相同的行为

Why have for-loops with pre-increment the same behaviour as those with post-increment?

本文关键字:循环 为什么      更新时间:2023-09-26

可以公平地说,每个人都学习使用后增量为循环编写:

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循环的最后一部分只发生在每个循环的

所以++ii++在这种情况下基本上做相同的事情。


操作顺序:

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);

啊,由于运算符是在相同的表达式中使用的,那么我们使用的运算符很重要!

这基本上就是正在发生的事情。既然它们是不同的表达方式,想象一下它们在不同的线上运行。