为什么具有预增量的 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
被初始化为 0
; i
小于 10 时将执行循环体; i
增加到 1
并进入循环体; i
值 1
被打印到 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 表达式中使用了运算符,那么我们使用的那个就很重要了!
这基本上就是正在发生的事情。由于它们是不同的表达方式,想象它们在不同的行上 运行。
可以公平地说,每个人都学会了使用 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
被初始化为 0
; i
小于 10 时将执行循环体; i
增加到 1
并进入循环体; i
值 1
被打印到 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 表达式中使用了运算符,那么我们使用的那个就很重要了!
这基本上就是正在发生的事情。由于它们是不同的表达方式,想象它们在不同的行上 运行。