2017-01-16 2 views
0

なぜこの関数は10回だけ10回だけ送信しますか? 1 ... 2 ... 3 ... 4 ... 5などを送ってほしい 代わりにその表示 10 ... 10 ... 10 ... 10 ...なぜそれが起こるのか分からない。 個別の値を返すループを作成するにはどうすればよいですか?同じ値を表示するJavascriptループ10回

for (i = 0; i < locations.length; i++) { 

    setTimeout(function() { alert("test"+i.toString()) ; }, 100); 
                       } 

個別の値を返すループを作成するにはどうすればよいですか?

+0

:生命維持と全体のタイムアウトの呼び出しをラップすることを確認すること。 – Buffalo

答えて

1

これを行うには、クロージャを使用します(iをすぐに呼び出された関数式(IIFE)に戻す)。 i同じように動作を使用してタイムアウトをインクリメントする

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

:これはiの値を維持します。私はすでに最大値に達したタイムアウトが有効になっている時点で

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

+0

はい、これは動作します=)とにかく私は設定タイムアウトをインクリメントすることもできますか?例えば* 100? –

+0

@PeterSMcIntyre、はい、すべてのsetTimeoutコードをIIFEに移動することで簡単に実行できます。更新された回答を確認します。 – KevBot

+0

ありがとう、これは完璧です! –

関連する問題