Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么具有预增量的for循环与具有后增量的for循环具有相同的行为?_Javascript_For Loop_Post Increment_Pre Increment - Fatal编程技术网

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

Javascript 为什么具有预增量的for循环与具有后增量的for循环具有相同的行为?,javascript,for-loop,post-increment,pre-increment,Javascript,For Loop,Post Increment,Pre Increment,可以公平地说,每个人都可以使用后期增量来学习循环编写: for(var i = 0; i < 10; i++) { console.log(i); // 0..9 } for(变量i=0;i

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

for(var i = 0; i < 10; i++) {
  console.log(i); // 0..9
}
for(变量i=0;i<10;i++){
console.log(i);/0..9
}
当我将后增量换成预增量时,我希望如下所示:

for(var i = 0; i < 10; ++i) {
  console.log(i); // 1..10
}
for(变量i=0;i<10;++i){
console.log(i);/1..10
}
我的推理是:
i
被初始化为
0
;当
i
小于10时,将执行循环体
i
增加到
1
,并输入循环的主体<值为
1的code>i
打印到consele;再次评估循环的条件;等等


但输出(至少对于Chrome中的JavaScript)与后期增量相同:
0..9
。为什么呢?主体运行后是否执行增量?

for循环的最后一部分仅发生在每个循环的末尾

因此,
++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;
而(i<10){
//做事
控制台日志(i);
//以你自己的方式增加我
++i、 //或i++;
}

在后一个示例中,操作顺序为

var i = 0; // obviously
if (i < 10) /* proceed */
console.log(i); 
++i;
var i=0;//明显地
如果(i<10)/*继续*/
控制台日志(i);
++一,;
正如您所怀疑的那样,“++”并没有说“跳转队列并以完全不同的顺序执行操作”。

是在主体运行之后执行的增量吗?对

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

举个小例子:

var i = 0;
if (i<5)
    i++;
console.log(i);

啊,既然操作符在同一个表达式中使用,那么我们使用的那一个就很重要了


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

更新发生在循环体运行之后。您需要了解循环是如何工作的。当引擎进入循环时,它初始化变量并检查退出条件。一旦它处理了循环中的指令,它就会进行增量,检查退出条件等。这就是为什么使用pre-ore-post-increment不会产生实际效果的原因difference@jeff对于员额增加,这一点很清楚。但对于一个预增量,我的直觉使我误入歧途。谢谢大家的解释。if检查发生在控制台日志之前。增量发生在控制台日志之后。@Tuvia。显然,我的示例并不是在复制循环,而是为了演示,演示了for循环被分成多个语句这一事实的概念。
var i = 0;
if (i<5)
    ++i;
console.log(i);
var i = 0;
i += i++;
console.log(i);
var i=0;
i+= ++i;
console.log(i);