提问者:小点点

为什么具有前置增量的for循环与具有后置增量的for循环具有相同的行为?


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

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;当i小于10时,循环的主体将被执行;i增加到1并输入循环的主体;打印值为1i以协商;再次评估循环的条件;等等。

然而,输出(至少对于Chrome中的JavaScript)与后置增量相同:0…9。为什么?增量是在主体运行后执行的吗?


共3个答案

匿名用户

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

啊,因为运算符在相同的表达式中使用,所以我们使用的运算符很重要!

这基本上就是正在发生的事情。因为它们是不同的表达式,想象它们在不同的线上运行。