この記事は JavaScript のコールバック関数と非同期関数についての説明 (コード例) を提供します。必要な方は参考にしていただければ幸いです。
最初に知っておくべきことは、コールバックと非同期は同じものではないということです。
私は、js のすべてのコールバック関数は非同期で処理されると考えていましたが、実際にはそうではありません。
コールバックと言えば、誰もが JavaScript で次の例に遭遇したことがあるでしょう。
$('#id').on('click', function(){ //code }); $('#id').setTimeout(function(){ //code },1000);
これらのコードは長い間使用されてきました。使い方は知っていますが、コールバックには役に立たないかもしれません。
別の例
function a(callback) { alert("执行parent函数a!"); alert("开始调用回调函数"); callback(); alert("结束回调函数"); } function b(){ alert("执行回调函数b"); } function test() { a(b); a(function() { alert("执行匿名回调函数"); }); } test();
実行シーケンス:
親関数 a! を実行します。
コールバック関数の呼び出し開始
コールバック関数bを実行
コールバック関数を終了
親関数aを実行!
コールバック関数の呼び出し開始
匿名コールバック関数の実行
コールバック関数の終了
簡単に言えば、関数を仮パラメータとして渡すことです。上記コールバックパラメータは任意の名前に変更できます
#include <iostream> using namespace std; //定义回调函数 void Print() { cout <<"Hello World!\n"; } //定义实现回调函数的"调用函数" void Call(void (*callback)()) { callback(); } //在main函数中实现函数回调 int main(int argc,char* argv[]) { Call(Print); return 0; }
#include <iostream> using namespace std; //定义带参回调函数 void Print(string s) { cout << s << endl; } //定义实现带参回调函数的"调用函数" void Call(void (*callback)(string),string s) { callback(s); } //在main函数中实现带参的函数回调 int main(int argc,char* argv[]) { Call(Print,"Hello World!"); return 0; }
典型的な例
function a(){ console.log('执行a'); setTimeout(function(){ console.log('setTimeout'); }, 1000); } function b(){ console.log('执行b'); } a(); b();
実行シーケンス:
aの実行
bの実行
setTimeout(1秒後に実行)
非同期原理
js がシングルスレッドであるということは、一度に 1 つのタスクしか完了できないことを意味します。これは間違いなくキューイングです。後続のタスクは前のタスクを待つ必要があるため、ajax リクエストなどの時間のかかる操作がある場合にのみ実行できます。このような時間のかかるタスクを処理するためにスレッドを開くことがよくありますが、js 自体はシングルスレッドであり、この種のタスクの js の処理は、このタスクを 1 つずつマウントし、実行の最後にコールバック関数を追加します。
つまり、先ほどの例では、遅延時間を 0 に設定しても結果は同じです
以上がJavaScriptのコールバック関数と非同期性の解説(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。