for( var i=0; i<20; i++)
setTimeout(function(){
console.log(">>> "+i);
}, i*100);
因此,上面的代码输出>>> 19
20次。为了保持i
的迭代值,我正在使用一个闭包:
for(var i=0; i<20; i++)(function(i){
setTimeout(function(){
console.log(">>> "+i);
}, i*100);
}(i));
有什么问题?问题是循环控制语句,continue;
我可以使用return;
,但是当我需要break;
代码时,当其他人尝试阅读时,代码会变得反直觉。
那我该怎么办?
答案 0 :(得分:3)
这个怎么样?
for (var i = 0; i < 20; i++) {
var action = (function(i){
setTimeout(function(){
console.log(">>> "+i);
}, i*100);
// break => return false
// continue => return anything (e.g. true)
// default => return nothing
return false;
})(i);
if (action !== undefined) {
if (!action) {
break;
}
else {
continue;
}
}
}
编辑:
为continue语句添加了“支持”。这现在可以像jQuery.each()
循环一样工作。
答案 1 :(得分:1)
问题是当i变量为19时,实际上是在循环后调用代码。你必须使用一些局部变量。为了不混淆自己,我建议使用另一个名称作为闭包参数。
顺便说一下,第二个版本运作良好