ホームページ  >  記事  >  ウェブフロントエンド  >  jsの実行機構の概念とは何ですか? js実行機構の実装方法

jsの実行機構の概念とは何ですか? js実行機構の実装方法

不言
不言オリジナル
2018-08-11 16:06:031528ブラウズ

この記事があなたにもたらすのは、JS 実行メカニズムの概念ですか? js実行機構の実装方法は参考になると思います。

実際の開発では、リクエストが完了した後、リクエストで取得したデータを特定のオブジェクトや変数に代入したいことがありますが、リクエストのコールバック関数では値を代入するのではなく、以下の値を代入します。 request ステートメントを見ると、データを取得するリクエストは正常ですが、代入後の変数が未定義であることがわかります。どうしてこれなの?
まず第一に、同期と非同期という概念を理解する必要があります。ご存知のとおり、js はシングルスレッド言語です。つまり、js は一度に 1 つのタスクしか実行できません。タスクが複数ある場合、それらはタスクの順序で実行されます。ただし、無限ループに陥るなど、タスクの 1 つに時間がかかると、他のタスクが実行できなくなり、ブラウザが応答しなくなります。では、js はどのようにしてそれを解決するのでしょうか?それは、タスクを同期モードと非同期モードに分割して実行することです。同期とは上記のとおりであり、非同期とはタスクが終了したときに次のタスクを実行せずにコールバック関数を複数実行することを意味します。 ?違いは、後のタスクは、前のタスクの実行が完了するまで待つ必要がないことです。したがって、取得するプログラムの実行順序はタスクの順序ではありません。

setTimeout(function(){
    console.log('第一个延时调用');
});
console.log('哈哈哈');
new Promise(function(resolve){
    console.log('promise任务吗');
    resolve();
}).then(function(){
    console.log('回调函数???')
});
console.log('嘻嘻嘻');
setTimeout(function(){
    console.log('第二个延时调用');
});

実行結果は何ですか?
ははは
約束タスク
ふふふ
コールバック関数? ? ?

1回目の遅延通話
2回目の遅延通話
これはなぜですか?なぜ最後にsetTimeoutが実行されるのでしょうか?明らかに0msです。
これは、同期モードと非同期モードに加えて、タスクをさらにマクロタスクマイクロタスクに分割したためです。
マクロ タスク: コード スクリプト全体、setTimeout、setInterval を含む
マイクロ タスク: Promise、process.nextTick
実行中、マクロ タスクに入った後、最初のループが開始され、その後すべてのマイクロ タスクが実行され、次に次のステップが実行されます。マクロタスクは周期です。
上記のコードでは、マクロタスクを入力し、setTimeoutをマクロタスクとして登録し、キューに入れてから実行します。ハハハ、新しいPromiseが見つかったら、それを直接実行し、コールバック関数がマイクロタスクキューを配置し、2番目のPromiseを実行します。 setTimeout 上記と同様。次にマイクロタスクを実行します。ここではヒヒヒヒするだけです。最後に次のマクロ タスクを入力します。

関連する推奨事項:

JS 実行メカニズムの例の詳細な説明

JS 実行メカニズムの簡単な分析

以上がjsの実行機構の概念とは何ですか? js実行機構の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。