JavaScript でコールバックを使用する理由とその利点は何ですか? 質問する

JavaScript でコールバックを使用する理由とその利点は何ですか? 質問する

誰か、JavaScript でコールバックを使用する理由を説明してもらえますか? 例を見つけましたが、通常の関数を使用して実装できます。それを使用する利点は何ですか? コールバックを「どのように」使用するかについての回答は得られましたが、「なぜ」、いつ使用する必要があるかについての回答は得られませんでした。

通常、AJAX で使用されていることがわかりました。httpRequest.onreadystatechangeこれは Java のマルチスレッドに似ていますか? 応答のリスナーはどこにどのように存在しますか? 非同期プログラミングはマルチスレッドに似ていますか?

次のコードでは、制御フローはどのようになっていますか?

function some_function(arg1, arg2, callback) {
  var my_number = Math.ceil(Math.random() * (arg1 - arg2) + arg2);
  callback(my_number);
  some_different_function_not_callback(arg1);
}
some_function(5, 15, function(num) {
   console.log("callback called! " + num);
});

JQuery Web サイトから:

コールバックの特別な点は、「親」の後に現れる関数が、コールバックが実行される前に実行できることです (参照:http://docs.jquery.com/Tutorials:jQuery の仕組み

誰かこの行を例を挙げて説明してくれませんか?

ベストアンサー1

メインのブラウザ プロセスは、シングル スレッド イベント ループです。シングル スレッド イベント ループ内で長時間実行される操作を実行すると、プロセスは「ブロック」されます。これは、操作が完了するのを待つ間、プロセスが他のイベントの処理を停止するため、好ましくありません。'alert' は、数少ないブロックするブラウザ メソッドの 1 つです。alert('test') を呼び出すと、リンクをクリックしたり、Ajax クエリを実行したり、ブラウザ UI を操作したりできなくなります。

長時間実行される操作でブロックが発生しないように、XMLHttpRequest は非同期インターフェイスを提供します。操作が完了した後に実行するコールバックを渡し、処理中はブロックする代わりにメイン イベント ループに制御を戻します。

何かをイベント ハンドラーにバインドする場合、または操作がブロックされる可能性があり、非同期プログラミング インターフェイスが必要な場合を除き、コールバックを使用する理由はありません。

これは、ブラウザと node.js のサーバー側で使用されるイベント ループについて詳しく説明している優れたビデオです。

編集: jQuery ドキュメントの複雑な行は、制御がメイン イベント ループに戻されると、コールバックが非同期的に実行されることを意味しています。

parent_function(function () { console.log('Callback'); });
parent_doesnt_block(); // <-- function appears after "parent"
therefore_execution_continues();
// Maybe we get 'Callback' in the console here? or maybe later...
execution_still_continues();

おすすめ記事