6
for( var i=0; i<20; i++) 
    setTimeout(function(){ 
        console.log(">>> "+i); 
    }, i*100);

したがって、上記のコードは>>> 1920回出力します。反復値を維持するためiに、クロージャーを使用しています。

for(var i=0; i<20; i++)(function(i){
    setTimeout(function(){ 
        console.log(">>> "+i); 
    }, i*100);
}(i));

どうしたの?問題はループ制御ステートメントです。continue;私はそれを行うことができますreturn;が、コードが必要break;なときは、他の人がコードを読み込もうとすると直感に反します。

それで、なにかお手伝いできますか?

4

2 に答える 2

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()ループのように機能するようになりました。

于 2012-07-20T00:44:50.057 に答える
1

問題は、i変数が19の場合、コードがループの後に実際に呼び出されることです。ローカル変数を使用する必要があります。混乱しないように、クロージャパラメータに別の名前を使用することをお勧めします。

ちなみに、2番目のバージョンはうまく機能します

于 2012-07-20T00:39:25.353 に答える