0

私はこのような機能を持っています:

var a = function () {
    setTimeout(function () {
        alert(2);
    }, 0);
    alert(1);
}

a();

結果は1まず警告、次に警告2

しかし、私は、中にあると思いますalert(2)setTimeout、遅延があるのですぐに実行されます0

なぜalert(1)最初に実行されるのですか?

4

3 に答える 3

1

すぐに実行したくない場合は、setTimeout を削除するだけです。setTimeout にalert(1)は最小値があるため、こちらを参照してください。したがって、0 に設定すると、ブラウザに応じて最小値が使用されます。

于 2013-06-14T08:34:14.060 に答える
1

setTimeoutの実行後 に実行されるデフォルトの遅延がありますalert(1)

于 2013-06-14T08:34:23.483 に答える
0

他にも指摘されているように、setTimeout() の最小タイムアウトは 4 ミリ秒です。

さらに重要なのは、実際のタイムアウトが 0 ミリ秒だったとしても、最初に起動しないことです。これは、Javascript がシングルスレッドであるためです (Web ワーカーを無視します)。

alert(2)setTimeout() で設定されたものはすべて、現在の Javascript の実行が完了した後にのみ起動するため、最後に起動します。つまり、setTimeout() アクションは実行スタックの最後に配置されます。

したがって、現在の関数の実行が最初に終了し ( の実行alert(1))、その後にalert(2)が実行されます。

これが、その中のコードが正確な時間ではなく、指定された時間のsetTimeoutに実行されることのみを保証する理由でもあります.

優れた概要については、http://ejohn.org/blog/how-javascript-timers-work/を参照してください。

于 2013-06-14T08:35:00.817 に答える