为什么具有预增量的 for 循环与具有 post 增量的循环具有相同的行为?

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

可以公平地说,每个人都学会了使用 post-increment:

编写 for 循环
for(var i = 0; i < 10; i++) {
  console.log(i); // 0..9
}

当我将 post 增量换成预增量时,我希望得到以下结果:

for(var i = 0; i < 10; ++i) {
  console.log(i); // 1..10
}

我的推理:i 被初始化为 0i 小于 10 时将执行循环体; i 增加到 1 并进入循环体; i1 被打印到 consele;再次评估循环的条件;等等

然而输出(至少对于 Chrome 中的 JavaScript)与 post 增量相同:0..9。这是为什么? body之后执行的增量是运行?

for 循环的最后一部分只发生在每个循环的 end

所以 ++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;

“++”并不像您怀疑的那样 "jump the queue and do the operations in an entirely different order,"。

body是运行之后执行的增量吗?

看到那些分号了吗?他们的意思是完全不同的表达方式。

举这个小例子:

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

啊,既然在 same 表达式中使用了运算符,那么我们使用的那个就很重要了!

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