ホームページ >ウェブフロントエンド >jsチュートリアル >JSイベントポーリングメカニズムの説明
JS はシングルスレッド言語です。この記事では主に JS のイベント ポーリング メカニズムについて説明します。
1. まず、JSが同期か非同期かを決定し、同期はイベントテーブルに入ります
2. 非同期タスクはイベントテーブルに関数を登録します。トリガー条件が満たされると、最後にイベント キューにプッシュされます
3. メイン スレッドに入った後、同期タスクが実行されます。メイン スレッドがアイドル状態になるまで、実行可能ファイルがあるかどうかを確認するためにイベント キューに移動します。非同期タスクがある場合はメインプロセスにプッシュされます
for (var i=0;i<=5;i++){ setTimeout(()=>{console.log(i)},1000) }出力結果は、1sの後に6が連続して6つ出力されるはずです。この質問の主な知識ポイントはブロック レベルのスコープですが、イベント ポーリング メカニズムの導入に非常に適しています。 setTimeout は非同期タスクであるため、すべての同期タスクが実行されるまで待つ必要があります。つまり、i が 6 になると、同時に 6 つのタイマーの実行が開始されます。時間、i は 6. 変数のグローバル値を指しているので、6 を出力します。これは JS 実行メカニズム (1) ですさらに難しくするために、JS 実行メカニズム (2) を考慮してください
// promise里面的函数是立即执行的// 分别输出 2 3 5 4 1setTimeout(function () { console.log(1) },0);new Promise(function executor(resolve) { console.log(2); for(var i=0;i<10000;i++){ i==9999 && resolve(); } console.log(3); }).then(function () { console.log(4); }); console.log(5);最初のマクロ タスクが実行されましたはスクリプトである必要があるため、(実行を何秒遅らせても) タイマーがジャンプされ、Promise のコンテンツが順番に実行され、最初に 2 が出力され、次に for ループが実行されます。非同期コールバック関数。これは非同期実行に属します。同時に、タスク内にいる場合は、分割で述べたように、Promise はマイクロタスクであるため、マクロタスクの終了後にマイクロタスクのイベント キューがクリアされるため、3、5 になります。 、次に 4 が出力されます。
この時点で、最初のマクロタスクが処理され、次にタイマーの番になります。
以上がJSイベントポーリングメカニズムの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。