for循环的奇怪行为

时间:2016-12-19 10:47:16

标签: javascript for-loop

任何人都可以告诉我为什么即使在失败的迭代中for循环递增?

for (var n = 0; n <3; n++) {
     alert(n);                  // displays 0 , 1 , 2 
}
alert(n); // gives 3 

但不应该像

if(condition):
    //desired stuff
    increment;
else:
    exit;

我很少使用迭代变量,我只是在循环完成后将它们抛弃但在this case中发现它是导致错误的原因

4 个答案:

答案 0 :(得分:10)

概念上,n++在循环体的最终语句之后调用,并且在循环体的第一个语句之前评估停止条件。

所以你的代码相当于

for (var n = 0; n < 3; ) {
     alert(n);
     n++;
}

从这个角度来看,一旦循环存在,n为3的原因应该是显而易见的。

请注意,在javascript中,n 泄漏了 for循环。

答案 1 :(得分:2)

for (var n = 0; n <3; n++) {
    alert(n);                 
}
alert(n);

for循环的工作如下 -

  1. 首先将n初始化为0;

  2. 然后检查条件是否为真,在这种情况下条件为n <3。

    1. 最后它递增n并再次检查条件,如果它是真的,它再次进入块。如果条件为假,则退出for循环。
  3. 在你的代码中,当n = 3条件变为false时。所以n的最终值是3。

答案 2 :(得分:0)

刚刚在chrome console上执行了代码:

enter image description here

它按预期工作。

答案 3 :(得分:0)

正如你评论 n 会警告 3 ,这是错误的,因为当 n 2 <时/ strong>,条件将被检查,即 2 <2 将出错,然后它将从循环跳转并提醒 2 而不是 3