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 全体的な出力は次のとおりです。
これがあなたの答えですか? 要約:
以下もご興味があるかもしれません:
|
1. トランザクションとは何ですか?データベース トランザクション (略称: トランザクション) は...
1. ワニスの紹介Varnish は、高性能なオープンソースのリバースプロキシサーバーおよび HTT...
ページ分割されたクエリを実行するには: 1. MySQL の場合、サブクエリと結合の使用は推奨されま...
以前の就職面接で面接官が尋ねた質問を覚えています。「インライン要素とは何ですか。ブロックレベル要素と...
目次1. LVS 負荷分散2. 負荷分散LVSの基本紹介3. LVSアーキテクチャ3.1 ロードバラ...
目次echartの初期化アプリベースチャートコンポーネントhtml CS app-base-char...
CSS3 構文: (750 ピクセルのデザインの場合、1rem = 100 ピクセル) @media...
あなたはこの質問について考えたことがあるでしょうか?デュアルアクティブが構成されている場合、データル...
CentOS6.7にmysql5.7.18をインストールする 1. /usr/localディレクトリ...
Element UIのtextarea input自動サイズに設定すると、テキストボックスのデフォル...
システムをインタラクティブに監視したい場合は、htop コマンドが最適な選択肢の 1 つです。 ht...
OSS を使用して Vue プロジェクトに画像や添付ファイルをアップロードするここでは、写真のアップ...
Mysqldump は MySQL の論理バックアップに使用されます。高速ではありませんが、柔軟性が...
初めての投稿ですので、間違いや問題点などありましたら、コメント欄で指摘していただければ、今後改善させ...
この記事では、携帯電話のプルダウンリフレッシュを模倣したjsの具体的なコードを参考までに共有します。...