for(;i<5;i++)
{
(function(z){
setTimeout(function(){console.log(z);},2000);})(i);
}
これは 2 秒後に 0 1 2 3 4 5 を 1 ショットで出力します。そして、2秒後に各数字を印刷する解決策は何ですか.
for(;i<5;i++)
{
(function(z){
setTimeout(function(){console.log(z);},2000);})(i);
}
これは 2 秒後に 0 1 2 3 4 5 を 1 ショットで出力します。そして、2秒後に各数字を印刷する解決策は何ですか.
タイムアウトには間隔を空ける必要があり、私は常に異なる変数を使用してそれぞれを保存するので、特定の変数で clearTimeout を実行できます
var tIds=[];
for(var i=0;i<5;i++) {
(function(z){
tIds[i]=setTimeout(function(){window.console&&console.log(z);},2000*i); //fire 2000,4000,6000
})(i);
}
また、ドキュメントを読んで、2000+i が機能しないように見える理由を理解してください。
setTimeout
コードの実行を 2 秒間ブロックしません。実際setTimeout
にはすぐに戻り、ループが続きます。したがって、5 つの非同期呼び出しはすべて、タイムアウト後にほぼ同時にトリガーされます。
あなたが望むものに近づくために、私はこの再帰のようなバージョンが欲しい
関数 print(i) { if (i >= 5) 戻ります。 console.log(i); setTimeout(関数 () { 印刷 (i + 1); }、2000); } 印刷 (0);
このコードを使用してみてください。
//Referring your code for better understanding..
for(i=0;i<5;i++) {
(function(z){
setTimeout(function(){console.log(z);},2000*z);})(i);
}
関数の5 つの非同期呼び出しをほぼ同時に実行しています。
を使用して差分アプローチを試すことができますsetInterval
。
var timer = setInterval(function(){printThing();},2000);
var i = 0;
function printThing(){
if(i<=5){
window.console && console.log(i);
++i;
}
else{
clearInterval(timer)
}
}//end function
setTimeout(fn,delay)
ミリ秒単位のfn
遅延の後、指定された関数を実行します。delay
したがって、単純i
に 2000 を掛けて次のように使用できます。
for(;i<5;i++) {
setTimeout(function(){console.log(z);},2000*i);
}
i
内でレポートまたは使用する場合は、レポートまたは使用のクロージャをfn
使用して、で使用する関数を返す関数を作成する必要があります。以下では、変数 を使用して囲まれています。これは、後で で使用する関数オブジェクトを作成する、すぐに呼び出される無名関数によって使用されます。setTimeout
i
i
x
f
setTimeout
for(var i=0;i<5;i++)
{
var f = function(x){
return function(){console.log(z+'#'+x);}
}(i);
setTimeout(f,2000*i);
}