私はこのような機能を持っています:
var a = function () {
setTimeout(function () {
alert(2);
}, 0);
alert(1);
}
a();
結果は1
まず警告、次に警告2
しかし、私は、中にあると思いますalert(2)
がsetTimeout
、遅延があるのですぐに実行されます0
なぜalert(1)
最初に実行されるのですか?
私はこのような機能を持っています:
var a = function () {
setTimeout(function () {
alert(2);
}, 0);
alert(1);
}
a();
結果は1
まず警告、次に警告2
しかし、私は、中にあると思いますalert(2)
がsetTimeout
、遅延があるのですぐに実行されます0
なぜalert(1)
最初に実行されるのですか?
すぐに実行したくない場合は、setTimeout を削除するだけです。setTimeout にalert(1)
は最小値があるため、こちらを参照してください。したがって、0 に設定すると、ブラウザに応じて最小値が使用されます。
setTimeout
の実行後 に実行されるデフォルトの遅延がありますalert(1)
。
他にも指摘されているように、setTimeout() の最小タイムアウトは 4 ミリ秒です。
さらに重要なのは、実際のタイムアウトが 0 ミリ秒だったとしても、最初に起動しないことです。これは、Javascript がシングルスレッドであるためです (Web ワーカーを無視します)。
alert(2)
setTimeout() で設定されたものはすべて、現在の Javascript の実行が完了した後にのみ起動するため、最後に起動します。つまり、setTimeout() アクションは実行スタックの最後に配置されます。
したがって、現在の関数の実行が最初に終了し ( の実行alert(1)
)、その後にalert(2)
が実行されます。
これが、その中のコードが正確な時間ではなく、指定された時間の後setTimeout
に実行されることのみを保証する理由でもあります.
優れた概要については、http://ejohn.org/blog/how-javascript-timers-work/を参照してください。