1. 4つのコンセプト1. JavaScriptはシングルスレッドですシングルスレッドとは、 2. タスクキュー上記のキューイング問題を解決するために、タスク キューが作成されます。ブラウザに結果を伴う非同期タスクがある場合、それは将来の実行のためにタスク キューに追加され、他のタスクはメイン スレッドで同期的に実行されます。 ここで注意すべき点は、タスク キューにタスクを追加するタイミングは、非同期タスクの結果が出た後であるということです。実際、タスク キューに存在するのは、非同期タスクのコールバック関数です。 3. 同期タスクと非同期タスクJs プログラムにおける同期タスクはメインスレッドで実行されるタスクを指し、非同期タスクはタスクキューに入るタスクを指します。 4. JavaScript実行スタックすべての同期タスクはメインスレッド上で実行され、実行スタックを形成します。メインスレッド上のタスクが完了すると、タスクはタスクキューから取り出されて実行されます。 var name = "zhouwei"; タイムアウトを設定する(() => { コンソールログ(1); }, 1000); console.log(名前); 上記のコードは、ブラウザでは次のように実行されます。プログラムのグローバル実行環境のコードは、main 関数にラップされたコードとして理解されます。このコードの実行スタックは、次の図に示すように変化します。
イベントループJs 実行スタックがタスク キューからタスクを継続的に読み取り、実行するプロセスを タスク キューには非同期タスクの結果が格納されることはわかっていますが、非同期タスクとは何でしょうか?
タスクキューに入る非同期タスクコールバックは、マクロタスクとマイクロタスクに分けられます。マクロタスクとマイクロタスクを実行するための Js 実行スタックのルールを下図に示します。 Js 実行スタックは、最初にマクロ タスク (グローバル コード) を実行し、タスク キューからすべてのマイクロ タスクを読み取り、UI レンダリング (ブラウザー レンダリング インターフェイス) を実行し、タスク キューからマクロ タスクを読み取り、すべてのマイクロ タスクを実行し、UI レンダリングを実行し、…
マクロタスクとは何ですか?
マイクロタスクとは何ですか?
setTimeout 遅延の問題 一般的に、コード内の 3. 実戦次のコード出力を練習してください。 コンソールログ(1); タイムアウトを設定する(() => { コンソールログ(2); Promise.resolve().then(() => { コンソール.log(3) }); }); 新しいPromise(resolve => { コンソールログ(4); タイムアウトを設定する(() => { コンソールログ(5); }); 解決する(6) })。次に、データ => { コンソールにログ出力します。 }) タイムアウトを設定する(() => { コンソール.log(7); }) コンソールログ(8); この質問を分析するには、上で説明した js 実行メカニズムを使用します。 1: グローバルタスクで同期コード出力を実行します。
ここで注意すべき点は、 2: この時点で、タスク キューには 3 つの // この時点でのマクロタスクは setTimeout(() => { コンソールログ(2); Promise.resolve().then(() => { コンソール.log(3) }); }); タイムアウトを設定する(() => { コンソールログ(5); }); タイムアウトを設定する(() => { コンソール.log(7); }) // この時点で、マイクロタスクは then(data => { コンソールにログ出力します。 })
3: 最初のマクロタスクを実行します タイムアウトを設定する(() => { コンソールログ(2); Promise.resolve().then(() => { コンソール.log(3) }); });
このマクロタスクでは、マイクロタスクがタスク キューに追加されます。この時点で、タスク キューには新しいマイクロタスクがあります。 4: マイクロタスクを実行し、出力: 3 それから(() => { コンソール.log(3) }); 5: ルールに従ってタスクの実行を継続します。出力: 5、7 全体的な出力は次のとおりです。
これがあなたの答えですか? 要約:
以下もご興味があるかもしれません:
|
IE には長い間問題がありました。誰もがテストを受けたとき、誰もが笑顔でしたが、それはただのニヤニヤ...
目次プロジェクトの作成プロジェクト構造メイン.jsアプリ.vue:設定コンポジションAPI参照反応的...
1. イベントの簡単な紹介イベントは、MySQL が特定の時間に呼び出す手続き型データベース オブジ...
1. ワンストップソリューション1. 問題の分析と特定 # MySQL設定ファイルを見つけて、MyS...
目次1. プロトタイプとは何ですか? 1.1 関数プロトタイプオブジェクト1.2 コンストラクタを使...
Canal は、Java を使用して開発された Alibaba のオープンソース プロジェクトです...
目次ピッカーコンポーネントとはピッカーコンポーネントの問題解決オプションの説明解決ディレクトリ部門P...
以下のように表示されます。昨日: UNIX_TIMESTAMP(CAST(SYSDATE() AS ...
一般的に言えば、HTML ドキュメント内で極端に大きな <ol> リストに遭遇する可能性...
目次1. ワークフローを実行する2. ミラーリングの基本コマンド1. ワークフローを実行するDock...
入力が進行中かどうかを検出するには、「onInput(event)」を使用しますコンテンツが変更され...
<br />ネットワーク設計の分野では、アイトラッキングに関する研究が非常に盛んに行われ...
今日、問題が発生しました: MySQL の insert into、update、delete ステ...
参考までにmysql5.5.28のインストールチュートリアルです。具体的な内容は次のとおりです。イン...
前面に書かれたデータベースは本質的に共有リソースであるため、同時アクセスのパフォーマンスを最大化する...