javascript for循环意外行为

时间:2010-07-03 06:50:10

标签: javascript loops

我有几个关于javascript for循环的问题。

第一个问题:

for (i=0; i<=2; i++) {;}
console.log(i);

输出是3.不应该是2吗?

第二个问题:

for (var i=0; i<=2; i++) {
    setTimeout(function(){console.log(i);}, i*1000);
}

超时设置正确:0,1000和2000.但输出为3,3,3(应为0,1,2)。这是否意味着在循环退出后执行延迟函数?为什么?

我应该阅读什么才能理解所有这些神秘的javascript内容?

谢谢。

2 个答案:

答案 0 :(得分:10)

第一个问题:

否,因为{<1}}变量在最后一次成功迭代后递增,然后检查条件并评估为i,以便循环结束。

false语句由以下内容组成:

for

并按以下步骤执行:

  1. for ([initialExpression]; [condition]; [incrementExpression]) statement 在开始时进行评估
  2. 评估initialExpression,如果评估为condition,则循环结束,如果评估为false,则评估该语句。
  3. 评估声明。
  4. 评估true,转到第2步。
  5. 第二个问题:

    该功能在循环结束后异步执行,此时您知道incrementExpression包含i

    常见的解决方法是使用函数在每次迭代时保留循环变量的值,例如:

    3

答案 1 :(得分:0)

那是因为你的console.log指令不在for循环中。

这将按照您的意图将其打印为两个:

for (i=0; i<=2; i++) {
    console.log(i);
}

For循环只会重复执行您在括号内输入的内容。这就是为什么console.log只执行一次。

来源:http://www.kompulsa.com/a-guide-to-for-loops-in-javascript/