我有几个关于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内容?
谢谢。
答案 0 :(得分:10)
第一个问题:
否,因为{<1}}变量在最后一次成功迭代后递增,然后检查条件并评估为i
,以便循环结束。
false
语句由以下内容组成:
for
并按以下步骤执行:
for ([initialExpression]; [condition]; [incrementExpression])
statement
在开始时进行评估initialExpression
,如果评估为condition
,则循环结束,如果评估为false
,则评估该语句。true
,转到第2步。第二个问题:
该功能在循环结束后异步执行,此时您知道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/