2016-04-28 20 views
0
var timeout = setTimeout(function(){ 
    console.log("I'm message from timeout"); 
},0); 

console.log("I'm message from outside timeout"); 

//1. I'm message from outside timeout 
//2. I'm message from timeout 

setTimeout時間を0に設定したにもかかわらず、内部命令が最初に実行されないのはなぜですか?私は0/nullを含む様々な時間を使用して、私はどのようにsetTimeoutオブジェクトを保持し、フローでその命令を実行するのだろうかと思います。setTimeout(..、0)がすぐに実行されないのはなぜですか?

+3

JavaScriptの* next * "実行時間"までは常に*延期されます。 0/nullの値はこれを変更しません(最新のブラウザでは5の値として扱われます)。 – user2864740

+3

私は長い答えをここに書いています:http://stackoverflow.com/questions/32580940/cleartimeout-necessary-after-settimeout-with-0ms/32591948#32591948他にも多くの関連する質問があります。 – user2864740

+0

http:// stackoverflow。 com/questions/9647215/what-is-minimum-millisecond-value-of-settimeout?lq = 1 – user2864740

答えて

1

JavaScriptコードは1つのスレッドでのみ実行されます。 setTimeoutは、後で実行する機能をスケジュールします。したがって、現在実行中のすべてのコードが実行を終了したjsでは、eventループは他のイベントを探します。 したがって、setTimeout(.. 0)は、現在のループの後にコードを実行します。

console.log("I'm message from outside timeout");が最初に実行される予定です。終了するとすぐにsetTimeoutが実行されます

したがって、最終行setTimeout(myfunction ,0)は、現在実行中の機能の後に0msを実行します。あなたは別のはconsole.log(「私は外timeout1からのメッセージだ」)を追加する場合&あなたのケースで現在の実行ループは

console.log("I'm message from outside timeout"); 

です。 ので、現在のイベントループは最初setTimeout機能を開始する前に

I'm message from outside timeout 
I'm message from outside timeout1 

を記録します。

setTimeoutのタイムアウトは4msです。このSaackoverflow threadをご覧になると、詳細が分かります

+1

説明方法順序が混乱しています。 'setTimeout'自体は' console.log'の前に実行され、*に渡された関数だけがスケジュールされます。 –

+2

"*最小タイムアウト4ms *"に関して、必ずしもそうである必要はありません。現在の[* WHATWG仕様*](https://html.spec.whatwg.org/multipage/webappapis.html#timers)では、「* ...そのような入れ子にされたタイマーが5つは、間隔が少なくとも4ミリ秒* "となります。したがって、最小限の遅延は実装が設定したものである。 – RobG

関連する問題