JavaScript setTimeoutの原理

1956 ワード

JavaScriptエンジンはイベントドライバの単一スレッドに基づいて実行されます.JavaScriptエンジンは常にタスクのキューの中のタスクを待っています.
setTimeoutが起動すると、JavaScriptエンジンはタイマーtimerを起動し、第二のパラメータnミリ秒以降に第一のパラメータコールまたはコードセグメントを実行し、タイマーの時間が来たら、イベントをメインイベントキューに置いて処理を待つ.
つまりタスクをキューに置く順番を見なければなりません.
var waiting = (number)=> {
    var now = new Date();
    var untilEnd = now.getTime() + number;
    while (true) {
        now = new Date();
        if (now.getTime() > untilEnd)
            return;
    }
}
(()=> {
    setTimeout(()=> console.log("   ,       "), 100);
    console.log("     100ms        ");

    waiting(100);
    console.log("   100ms");

    setTimeout(()=> console.log("    10ms    ,          。"), 10);
})();

waiting(500);
console.log("    500ms,  ");
結果:
理論的には100 ms後に遅延コールをして、100 ms待ちました.その後、暇な時に、遅延コールをしました.10 ms遅れは短いですが、列の最後に並びました.