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 全体的な出力は次のとおりです。
これがあなたの答えですか? 要約:
以下もご興味があるかもしれません:
|
この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...
この記事では、ソシュールの言語哲学などの理論に基づいて、CSS の class 属性は不要であると主...
プロジェクトシナリオ: 1. アップロードファイルの制限関数: 1. フロントエンド操作による異常な...
成果を達成する実装コードhtml <div クラス = 'ラッパー'> ...
目次1. 説明2. 関連する依存パッケージをダウンロードする3. 設定ファイル .eslintrc....
/****************** * 高度な文字デバイス ドライバー ***********...
ポートを使用して MySQL をインストールした後、しばらくすると /var の容量が不足しているこ...
目次序文環境の準備カテゴリコンポーネントアプリのコンポーネント1. デフォルトスロット2. 名前付き...
目次需要背景Nginx を使用する理由は何ですか? Nginx によるポート転送依存関係をインストー...
この問題について話すとき、垂直方向の中央揃えを設定するための vertical-align 属性が ...
1. ip_hash: ip_hash は、送信元アドレス ハッシュ アルゴリズムを使用して、サーバ...
説明する: Tabs コンポーネントが切り替わると、TabPane に含まれる同じサブコンポーネント...
出典: http://www.ruoyi.vip/ 'vue' から Vue をイン...
継承する1. 継承とは何か継承: まず、継承とは関係、つまりクラス間の関係です。JS にはクラスはあ...
1. 環境整備:オペレーティング システム: CentOS Linux リリース 7.5.1804 ...