我有几个关于javascript for循环的问题.
第一个问题:
for (i=0; i<=2; i++) {;}
console.log(i);
Run Code Online (Sandbox Code Playgroud)
输出是3.不应该是2吗?
第二个问题:
for (var i=0; i<=2; i++) {
setTimeout(function(){console.log(i);}, i*1000);
}
Run Code Online (Sandbox Code Playgroud)
超时设置正确:0,1000和2000.但输出为3,3,3(应为0,1,2).这是否意味着在循环退出后执行延迟函数?为什么?
我应该阅读什么来理解所有这些神秘的javascript东西?
谢谢.
CMS*_*CMS 10
第一个问题:
否,因为i变量在最后一次成功迭代后递增,然后检查条件并进行求值以false使循环结束.
该for声明由以下内容组成:
for ([initialExpression]; [condition]; [incrementExpression])
statement
Run Code Online (Sandbox Code Playgroud)
它按以下步骤执行:
initialExpression在开始评估condition评估,如果评估到false,循环结束,如果计算结果为true,该声明进行评估.incrementExpression评估,转到步骤2.第二个问题:
该功能是异步执行后的循环已经结束,在这个时候你也知道i含有3.
此共同的解决方法是使用一个函数,以便保持在每一次迭代的循环变量的值,例如:
for (var i=0; i<=2; i++) {
(function (i) {
setTimeout(function(){console.log(i);}, i*1000);
})(i);
}
Run Code Online (Sandbox Code Playgroud)