javascriptコールバック関数を再理解する
5928 ワード
関数をパラメータとして別の関数に入力します.この関数はいわゆるコールバック関数です.
よくこのような状況に遭遇します.あるプロジェクトのA層とB層は異なる人員で共同で完成します.A層は機能funA、B層はfuncBを担当します.B層があるモジュールのデータを使う時、彼はA層の人員に対して、ある種類の需要を満たすデータを提供してほしいと言っています.インタフェースを提供してください.
A階のスタッフは、データを提供します.どのように展示して処理するかはBのことです.もちろんB層はそれぞれの需要に対して一つのデータインターフェースを提供することができません.BはAに通過するインターフェースを提供します.Bはデータを得て、Bは関数を書いて展示します.
つまり、あなたは他の人と協力して、他の人がデータを提供する必要があります.他の人がデータを取得したり構築する方法に注目する必要はありません.これを入手したデータだけ操作してください.この場合はコールバック関数を使う必要があります.
したがって、フィードバックは本質的に設計モードであり、jQuery(他のフレームを含む)の設計原則はこのパターンに従う.
一つの同期(ブロッキング)では、コールバックの例を用いて、Fnc 1コードの実行が完了した後にFnc 2を実行することを目的とする.
var func1=function(callback){ //do something.
(callback && typeof(callback) === "function") && callback(); } func1(func2); var func2=function(){ }
非同期コールバックの例:
$(document).ready(callback);
$.ajax({
url: "test.html",
context: document.body
}).done(function() {
$(this).addClass("done");
}).fail(function() {
alert("error");
}).always(function() {
alert("complete");
});
,ajax , , , , JavaScript 。 :http://www.phpv.net/html/1700.html
コールバックはいつ実行しますか?
コールバック関数は、通常同期された状況で最後に実行されますが、非ステップの状況では実行されない可能性があります.イベントがトリガされていないか、または条件が満たされていないためです.
コールバック関数の使用の場合
インターネットで資料を集めて、分かりました.自分で例をまとめました.
function fun(num,callback){ if(num<0) { alert(" A !"); alert(" , !"); }else if(num==0){ alert(" A !"); alert(" !"); }else{ alert(" B !"); callback(1); } } function test(){ var num=document.getElementById("score").value; fun(num,function(back){ // B
alert(":"+back);
if(num<2) alert(" 1"); else if(num<=3) alert(" 2 3!"); else alert(" 3!"); }) }
関数がfunを実行することを開始する時、先に行ってnumがマイナスかそれともゼロかを判定して、さもなくばB層の処理関数alert(":+back);出力1は、<2、<=3、>3などと判定した場合.経験のヒント:
コールバックが存在し、関数参照または関数式が必要です.
var obj={ init : function(callback){ //TODO ...
if(callback && typeof(callback) === "function") && callback()){ callback('init...');//
} }
最後に、なぜコールバック関数を使うのですか?下の比喩はとても生き生きしていて面白いです.
隣の部屋に用事があって、クラスメートを探しに行きます.人がいないことに気づきました.どうすればいいですか?
方法1、数分おきに隣の部屋に行って、人を見てもいいですか?2、彼と同じ寝室の人にお願いします.彼が帰ってくるのを見たら、あなたを呼びます.
前者はポーリングで、後者はコールバックです.
隣の寝室で直接にクラスメートが帰ってくるまで待ってもいいですか?
いいですよ.でも、これで他のことをする時間を節約できます.今は待つ時間を浪費しなければなりません.元の非ブロックの非同期呼び出しをブロックの同期呼び出しに変えました.
JavaScriptのコールバックは、非同期のコールシーンで使用され、リターン性能をポーリングよりも使用します.