JavaScriptのコールバック関数と非同期性の解説(コード例)

不言
リリース: 2018-11-12 14:58:47
転載
2381 人が閲覧しました

この記事は 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を実行!
コールバック関数の呼び出し開始
匿名コールバック関数の実行
コールバック関数の終了

コールバック原理

簡単に言えば、関数を仮パラメータとして渡すことです。上記コールバックパラメータは任意の名前に変更できます

コールバックはC

パラメータなしのコールバック

#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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!