javaScriptのset TimeOut()
2177 ワード
もっと読む
setTimeoutを使用する場合、4回実行すると以下のような例があります。
A=0
B=0
A=1
B=1
A=2
B=2
A=3
B=3
実際の結果は以下の通りです。
A=0
A=1
A=2
A=3
B=4
B=4
B=4
B=4
おかしいと思いますか?
これはjavascriptが単一の実行順に属していて、window.setTimeout(A,0)が見えます。すぐ実行されるようですが、forループ内のsetTimeoutは、forループが終了するまで、代用のスタックに入れておきます。これで終了すると、iは4となります。結果として、積み重ねられた各実行タスクのiは4となります。
だから、いい書き方は:
を選択します。
また、タイマーをクリアするには、タイミング時に発生するID ID ID ID IDをclearTimeoutまたはclearInterval関数に渡すことによって、タイミングをクリアしても良いし、どの関数を使うかは呼び出し時に使うのがsetTimeoutかsetIntervalかによって決まります。サンプルは以下の通りです
ref:
1、Javascript:setTimeout
http://smlsun.com/blog/2013/02/01/javascript-settimeout/
2、JavaScriptはマルチスレッドがありますか?JavaScriptタイミングメカニズムを深く理解する
http://www.phpv.net/html/1700.html
を選択します。
setTimeoutを使用する場合、4回実行すると以下のような例があります。
for (var i = 0; i < 4; i++)
{
console.log("A="+i);
function A(){
console.log("B="+i);
}
window.setTimeout(A, 0);
}
一般常識的な判断の結果は、A=0
B=0
A=1
B=1
A=2
B=2
A=3
B=3
実際の結果は以下の通りです。
A=0
A=1
A=2
A=3
B=4
B=4
B=4
B=4
おかしいと思いますか?
これはjavascriptが単一の実行順に属していて、window.setTimeout(A,0)が見えます。すぐ実行されるようですが、forループ内のsetTimeoutは、forループが終了するまで、代用のスタックに入れておきます。これで終了すると、iは4となります。結果として、積み重ねられた各実行タスクのiは4となります。
だから、いい書き方は:
var i = 0;
function doAppend(){
if (i++ >= 4){
return;
}
console.log("B="+i);
setTimeout(doAppend, 0);
}// 。 , 。
console.log(i);//i=0
setTimeout(doAppend, 0);//
上の例と何が違いますか?上のsetTimeoutはそれぞれ独立しています。この例のsetTimeoutは一環として接続されています。そうすると、各setTimeoutは正しいiがあります。を選択します。
また、タイマーをクリアするには、タイミング時に発生するID ID ID ID IDをclearTimeoutまたはclearInterval関数に渡すことによって、タイミングをクリアしても良いし、どの関数を使うかは呼び出し時に使うのがsetTimeoutかsetIntervalかによって決まります。サンプルは以下の通りです
var id = setTimeout ( foo , 1000 );
clearTimeout ( id );
すべてのタイマーをクリアすると仮定しますが、内蔵しているタイマーを取り除く方法がないので、暴力的な方法でこの目的を達成することができます。// " "
for ( var i = 1 ; i < 1000 ; i ++) {
clearTimeout ( i );
}
上のコードからクリアされないタイマーがあるかもしれません。(タイマーが起動した時に戻ってきたIDの値が1000より大きい場合)、事前にすべてのタイマーIDを保存してからクリアします。ref:
1、Javascript:setTimeout
http://smlsun.com/blog/2013/02/01/javascript-settimeout/
2、JavaScriptはマルチスレッドがありますか?JavaScriptタイミングメカニズムを深く理解する
http://www.phpv.net/html/1700.html
を選択します。