Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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循环的奇怪行为_Javascript_For Loop - Fatal编程技术网

Javascript for循环的奇怪行为

Javascript for循环的奇怪行为,javascript,for-loop,Javascript,For Loop,有人能告诉我为什么即使在失败的迭代中,也会增加循环增量吗 for (var n = 0; n <3; n++) { alert(n); // displays 0 , 1 , 2 } alert(n); // gives 3 我很少使用迭代变量,大多数情况下,我只是在循环完成时扔掉它们,但实际上,我发现它是一个错误的原因。从概念上讲,n++是在循环体的最后一个语句之后调用的,停止条件是在循环体的第一个语句之前评估的 所以你的代码相当于 fo

有人能告诉我为什么即使在失败的迭代中,也会增加循环增量吗

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

我很少使用迭代变量,大多数情况下,我只是在循环完成时扔掉它们,但实际上,我发现它是一个错误的原因。

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

所以你的代码相当于

for (var n = 0; n < 3; ) {
     alert(n);
     n++;
}
(变量n=0;n<3;){ 警报(n); n++; } 从这个角度来看,一旦循环存在,
n
就是3的原因应该是显而易见的


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

刚刚在chrome控制台执行了代码:


它按预期工作。

正如您所评论的那样,n将对3发出警报,这是错误的,因为当n2时,将检查条件,即2
(var n=0;n如果
n
没有增加到3,你怎么能期望条件检查失败呢?它的值不会因为不再满足循环的条件而恢复到2。这是因为javascript中的每个变量都属于函数的作用域。这意味着在函数之后仍然存在n。实际上,在例如,它应该提醒“2”,或者我遗漏了什么?Opps它是
n@JonK不会
2,但是如果n==2,n++不会运行。它只运行到n==1(即:n<2)@sg Oops.Typo:for
循环的
方式与OP的方式相同,除了我移动
n++
。明白了!它总是会增加,因为否则平等情况绝对不会正确。
n
在循环退出时总是处于第一个失败状态。@Bathsheba:你在回答中提到的行为是错误的如果循环条件为“这是正确的”,则不应发生,但当它退出循环时,k将为3,因为循环无论如何都会增加它
for (var n = 0; n < 3; ) {
     alert(n);
     n++;
}
for (var n = 0; n <3; n++) {
    alert(n);                 
}
alert(n);