web-dev-qa-db-ja.com

遅延のないsetTimeoutは、関数を即座に実行するのと同じですか?

Webアプリケーションの既存のコードを調べています。これを見た:

window.setTimeout(function () { ... })

これは、関数のコンテンツをすぐに実行することと同じですか?

51
Aishwar

必ずしもすぐに実行されるとは限らず、遅延を明示的に0に設定することもありません。理由は、setTimeoutが関数を実行キューから削除し、JavaScriptが現在の実行キューで終了した後にのみ呼び出されるためです。

console.log(1);
setTimeout(function() {console.log(2)});
console.log(3);
console.log(4);
console.log(5);
//console logs 1,3,4,5,2

詳細については http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/ を参照してください

84
angusC

setTimeoutが使用する最小遅延があります(HTML5に従って4ミリ秒、Firefox 3.6は10ミリ秒を使用)。 Mozilla Developer Center ドキュメントページ でそれについての議論があります。

21

ミリ秒パラメーターがありません...

setTimeout(function() { /*something*/ }, 0);

0は遅延を0に設定しますが、実際に行うことは、ブラウザー実行リストの関数"jump the queue"を許可することです。ブラウザーには、ページ上のオブジェクトのレンダリングなど、やるべきことがたくさんあります。これを呼び出すと、ブラウザーにいくつかのサイクルがあるとすぐに関数が実行されます。

1
Gary