为什么for-loops的预增量与后增量相同?

时间:2016-04-18 21:30:09

标签: javascript for-loop post-increment pre-increment

可以说每个人都学习使用后增量编写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并输入循环体;值i的{​​{1}}打印出来以确认;再次评估循环的条件;等

然而,输出(至少对于Chrome中的JavaScript)与后增量相同:1。这是为什么?身体运行后是否执行增量?

3 个答案:

答案 0 :(得分:8)

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

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

操作顺序:

var i = 0;

while (i < 10) {
   // do stuff
   console.log(i);
   // increment i in your own way
   ++i; // or i++;
}

答案 1 :(得分:-1)

在后一个例子中,操作顺序是

var i = 0; // obviously
if (i < 10) /* proceed */
console.log(i); 
++i;

“++”并没有像你想象的那样说“以完全不同的顺序跳转队列并进行操作”。

答案 2 :(得分:-1)

身体运行后是否执行增量?是。

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

举一个小例子:

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

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

这基本上就是发生了什么。因为它们是不同的表达式,所以想象它们在不同的行上运行。