関数をパラメータとして別の関数に渡します。この関数はいわゆるコールバック関数です
プロジェクトの A 層と B 層が異なる人によって完成される状況によく遭遇します。A 層は関数 funA を担当し、B 層は関数 funcB を担当します。レイヤ B が特定のモジュールからのデータを使用したいとき、彼はレイヤ A の人々に、「特定のニーズを満たすデータを提供してください、そしてあなたは私にインターフェースを提供してください」と言います。
レベル A の担当者は、「データは私が提供します。それをどのように表示して処理するかは B の仕事です」と言いました。
もちろん、レイヤー B は、すべてのニーズに対応するデータ インターフェイスを提供することはできません。B は、B がデータを取得するためのインターフェイスを提供し、それを表示する関数を作成します。
つまり、他の人々と協力する必要があり、他の人々がデータを提供し、他の人々がどのようにデータを取得または構築するかに注意を払う必要はありません。取得したデータを操作するだけです。このとき、コールバック関数
を使用する必要があります。したがって、コールバックは本質的に設計パターンであり、jQuery (他のフレームワークを含む) の設計原則はこのパターンに従います。
同期 (ブロッキング) でのコールバックの使用例。目的は、func1 コードの実行が完了した後に func2 を実行することです。
関数1(関数2);
var func2=function(){
}
非同期コールバックの例:
$.ajax({
URL: "test.html",
コンテキスト: document.body
}).done(function() {
$(this).addClass("done");
}).fail(function() {
アラート("エラー");
}).always(function() {
アラート("完了");
});
http://www.phpv.net/html/1700.html
コールバックはいつ実行されますか?
コールバック関数は通常、同期状況では最後に実行されますが、非同期状況ではイベントがトリガーされなかったり、条件が満たされなかったりするため、実行されない場合があります。コールバック関数の利用シーン
リソースのロード: js ファイルを動的にロードした後にコールバックを実行、iframe をロードした後にコールバックを実行、Ajax 操作のコールバック、画像のロード完了後にコールバックを実行、AJAX など。
DOM イベントと Node.js イベントはコールバック メカニズムに基づいています (Node.js コールバックには、マルチレイヤー コールバックのネストの問題が発生する可能性があります)。
setTimeout の遅延時間は 0 です。このハックはよく使用されます。settimeout によって呼び出される関数は、実際にはコールバック
の具体化です。
オンラインで情報を収集すれば、私自身でも例を整理できます。
コールバックが存在し、関数参照または関数式であることを確認することが最善です:
方法 1、数分ごとに隣の寮に行き、誰かがいるかどうかを確認します
方法2、彼と同じ寮の人たちに、彼が帰ってくるのを見かけたら電話してもらうようお願いしてください
前者はポーリングであり、後者はコールバックです。
それでは教えてください、クラスメートが戻ってくるまで隣の寮で待っていてもいいですか?
はい、他のことをする時間を節約できたかもしれませんが、今度は待つことで時間を無駄にしなければなりません。元の非ブロッキング非同期呼び出しをブロッキング同期呼び出しに変更します。
JavaScript コールバックは非同期呼び出しシナリオで使用され、コールバックを使用した場合のパフォーマンスはポーリングよりも優れています。