1

window.setTimeout を実行するのに適したオプションとその理由は?

オプション A:

window.setTimeout(somefunc,0);

オプション B:

window.setTimeout(somefunc,n); //n may be any number >0

ありがとう。

4

6 に答える 6

2

タイムアウトまたはインターバルについては、最初の行に入れても、独自の関数を実行する前に、常に現在のスレッドがなくなるのを待ちます。

var color='white';
setTimeout(function(){alert(color+' from timeout')}, 0);
for(var i=0;i<100001;++i){
    if(i=100000)alert(color='green');
}
alert(color='red')
于 2010-03-04T02:40:00.407 に答える
1

オプション A はsomefunc、不必要な呼び出しのオーバーヘッドを追加して呼び出すだけですsetTimeout(2 番目のパラメーターは0 ミリ秒の delay を意味するため)。オプション B は、 の実行前に遅延が必要な場合に使用しますsomefunc。少し詳しく説明していただけますか、それともこれであなたの質問に答えていますか?

于 2010-03-04T01:33:56.193 に答える
1

それはあなたが何をしたいかによります。

setTimeout(somefunc,0)somefunc を呼び出すだけでそれほど違いはありません(ただし、最初に現在のブロックを終了してから呼び出されると
思います).setTimeout(somefunc,0)somefunc

ブラウザのレンダリングを待ってから実行する必要がある場合はsomefuncwindow.onloadまたは jQuery の$(document).ready

于 2010-03-04T01:34:51.167 に答える
0

setTimeout(fn,0) は、現在のコールスタックが展開された直後に関数 fn が呼び出されることを必ずしも保証しないことに注意してください。これは、非常に重要な違いではない可能性があります。

コードがsetTimeout (fn, 0) に到達する前に、ブラウザがイベントに何かを設定している可能性があります [setTimeout の前のコードに CPU を集中的に使用する計算が含まれている可能性があります] 。ここで例を参照してください

function clickHandler () {
    spinWait(1000);
    setTimeout(relayFunc, 0);
    //the jsFiddle link shows that relayFunc
    //will not be called after the clickHandler
    //if another event was queued during spinWait()
}

一般的な「dom 要素を最初にレンダリングする」以外の setTimeout の使用法については、こちらのブログを参照してください。

于 2013-03-22T19:01:25.837 に答える
0
window.setTimeout(somefunc,0);

somefunc をすぐに実行します (ただし、続行する前に戻り値を待ちません)

window.setTimeout(somefunc,n);

somefunc を実行する前に n ミリ秒待機します (ただし、続行する前に開始または復帰するまで待機しません)

またはsomefunc()、タイムアウトなしで呼び出すと、 somefunc が実行されますが、続行する前に終了するのを待ちます。

setTimeout は、新しいスレッドを「開始」するようなものと考えてください。

于 2010-03-04T01:40:58.827 に答える
0

使用中にブラウザの問題が発生したことを思い出したsetTimeout (func, 0)のでsetTimeout (func, 1)、遅延を最小限に抑えたいときはいつでもそうしています。ほとんどの (すべての?) ブラウザでは、実際の最短の遅延は数n > 1(間違いn > 0なく、おそらくn < 50) であることに注意してください。

どのブラウザで問題が発生したかは覚えていません。

于 2010-03-04T03:00:33.517 に答える