マクロタスクとマイクロタスクに関する質問です。 setTimeout(関数(){ コンソールログ('1') }); 新しいPromise(function(resolve){ コンソールログ('2'); 解決する(); }).then(関数(){ コンソールログ('3') }); コンソールログ('4') 上記のコードの実行順序は何ですか?
おそらく、次のように考えているのでしょう。js が 1 行ずつ実行されることを知らないのでしょうか。SetTimeout ちょっとパニックになったので、ブラウザに貼り付けて見てみました。 信じられない 混乱しながらも、JavaScriptの動作の仕組みをじっくり勉強するしかありません! 1. JavaScriptについて
2. JavaScript イベントループjs はシングルスレッドなので、ウィンドウが 1 つしかないカフェテリアのようなものです。学生は 1 人ずつ並んで食事を取る必要があります。同様に、js タスクも 1 つずつ順番に実行する必要があります。このモードは実行が簡単ですが、将来的に需要、トランザクション、リクエストが増加すると、このシングルスレッド モードの実行効率は必然的に低くなります。 1 つのタスクの実行に長い時間がかかる場合、その間に後続のタスクを実行することはできません。 ニュースに含まれる高解像度の写真の読み込みが非常に遅いのはよくあることです。写真が完全に表示されるまで、Web ページが停止したままでよいのでしょうか?この問題を解決するために、 JavaScript 言語ではタスク実行モードを同期と非同期に分けます。
地図の内容を言葉で表現すると次のようになります。
コード式の場合: データ = [] とします。 $.ajax({ url:blog.csdn.net、 データ:データ、 成功:() => { console.log('送信に成功しました!'); } }) console.log('コード実行が終了しました'); 上記は単純な Ajax リクエスト コードです。
上記のテキストとコードを通じて、js の実行順序について大まかに理解していただけたと思います。しかし、これは、何人かの友人が 2、4、1、3 と答えた理由でもあります。 しかし、実際には、非同期キューにはまだトリックが残っています。面接の質問では、 3. マクロタスクとマイクロタスクマクロタスクとマイクロタスクは標準ではないため、人によって理解の仕方は異なりますが、js では実行順序が統一されています。 マクロタスク:
マイクロタスク:
マクロタスクには以下が含まれます: <script> 全体のコード、 process.nextTickは大きく異なり、異なるノードは均一に実行されず、標準がありません。 ヒント: <script> コード全体をマクロ タスクに入れる人もいますが、私は個人的には好きではありません。私の場合は、実行のメイン スレッドだけです。私は個人的に、マクロ タスクとマイクロ タスクの両方を非同期タスクに分類しています。 面接の質問をもう一度見てみましょう。 //コールバックは非同期タスクです setTimeout(function(){//macro task console.log('1') }); 新しいPromise(function(resolve){ console.log('2');//メインスレッドを同期するresolve(); }).then(function(){//microtask console.log('3') }); console.log('4') //メインスレッドを同期する
したがって、結果は 2、4、3、1 です。 さらに、これについて詳しく説明しましょう。 setTimeout(() =>{//マクロタスクキュー1 console.log('1'); //マクロ タスク チーム 1 タスク 1 setTimeout(() =>{//マクロタスクキュー3(マクロタスクキュー1内のマクロタスク) コンソールログ('2') }, 0) 新しいPromise(resolve => { 解決する() console.log('3') //マクロタスクキュー1タスク2 }).then(() =>{//マクロタスク キュー 1 のマイクロタスク console.log('4') }) }, 0) setTimeout(() =>{//マクロタスクキュー2 コンソールログ('5') }, 0) console.log('6') //メインスレッドを同期する
上記のコードでは何が出力されますか? 4. マクロタスクとマイクロタスクを拡張する上記の質問は複雑です。よく考えてみてください。この複雑な状況で、どのように一つずつ実行すればよいのでしょうか。
検証後、結果は正しいです! js のマクロタスクとマイクロタスクに関するこの記事はこれで終わりです。js のマクロタスクとマイクロタスクに関する関連情報をさらに知りたい場合は、123WORDPRESS.COM で過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...
以前、インターネット上で動的ルーティング設定をいくつか見たことがありましたが、現在のプロジェクトとは...
このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...
目次1. はじめに2. データを消去するいくつかの方法2.1 ref() の使用2.2 スライスの使...
<Head>……</head> は <HTML> のファイル ヘ...
1. テキストの書式設定: この例では、HTML ファイル内のテキストを書式設定する方法を示します...
勉強や仕事で FTP サーバーを頻繁に使用する場合は、起動時に自動的に起動するように設定できます。設...
パブリッシュ/サブスクライブとは何ですか?例を挙げてみましょう。あなたは服を買うために店に行きます。...
目次ポータルエラー境界処理エラー境界を使用しない場合はどうなりますか?注記ポータルスロットとも言えま...
Web デザインは科学であると同時に芸術でもあります。 Web デザイン作業は、半分は適切なプログラ...
関連する知識ポイント親コンポーネントから子コンポーネントに値を渡す子コンポーネントから親コンポーネン...
MySQL のフィルタリングのタイミングは、集計関数で使用される where 条件と having ...
HTML は Hypertext Markup Language の略です。これは、実際のプレゼンテ...
123WORDPRESS.COM では、さまざまな環境での MYSQL の他のバージョンのインストー...
写真といえば、まず背景画像が思い浮かびます。私たちの装飾の多くは背景画像を使用して実現されているから...