在循环中获取值的更好方法

时间:2012-07-20 00:37:09

标签: javascript loops

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;代码时,当其他人尝试阅读时,代码会变得反直觉。

那我该怎么办?

2 个答案:

答案 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时,实际上是在循环后调用代码。你必须使用一些局部变量。为了不混淆自己,我建议使用另一个名称作为闭包参数。

顺便说一下,第二个版本运作良好