1. 程式人生 > >js的回調函數

js的回調函數

owa query rgs 當我 產生 blog complete 請求 代碼示例

介紹
首先從英文介紹開始

A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.

這裏只是js裏的解釋。

開始
字面上理解下來就是,回調就是一個函數的調用過程。那麽就從理解這個調用過程開始吧。函數a有一個參數,這個參數是個函數b,當函數a執行完以後執行函數b。那麽這個過程就叫回調。

其實中文也很好理解:回調,回調,就是回頭調用的意思。函數a的事先幹完,回頭再調用函數b。

舉個現實的例子:約會結束後你送你女朋友回家,離別時,你肯定會說:“到家了給我發條信息,我很擔心你。”對不,然後你女朋友回家以後還真給你發了條信息。小夥子,你有戲了。

其實這就是一個回調的過程。你留了個函數b(要求女朋友給你發條信息)給你女朋友,然後你女朋友回家,回家的動作是函數a。她必須先回到家以後,函數a的內容執行完了,再執行函數b,然後你就收到一條信息了。

這裏必須清楚一點:函數b是你以參數形式傳給函數a的,那麽函數b就叫回調函數。

也許有人有疑問了:一定要以參數形式傳過去嗎,我不可以直接在函數a裏面調用函數b嗎?確實可以。求解中。

解惑:如果你直接在函數a裏調用的話,那麽這個回調函數就被限制死了。但是使用函數做參數就有下面的好處:當你a(b)的時候函數b就成了回調函數,而你還可以a(c)這個時候,函數c就成了回調函數。如果你寫成了function a(){...;b();}就失去了變量的靈活性。

上一段代碼大家可以跑一下:

function a(callback)
{
alert("我是parent函數a!");
alert("調用回調函數");
callback();
}
function b(){
alert("我是回調函數b");

}
function c(){
alert("我是回調函數c");

}

function test()
{
a(b);
a(c);
}
根據代碼示例加深理解
問題:

現在有函數如下定義:
function A(a,callback){
....
}
function B(){
....
}
則可以有如下調用
A(a,B);來實現回調。
現在我希望傳給B一個參數c,即實現類似於: A(a,B(c)); 的效果,應該如何實現?

function A(a,callback){
var b=callback;
alert(a+b);
}
function B(c){
return (-c);
}
A(4,B(3))
根據jquery的ajax請求常見的場景再去寫一個示例:

我包裝了jQuery的ajax方法:

function doAjax(u,param,callback){
$.ajax({
type:‘POST‘,
url:u,
data:param,
success:callback
});
}

function showAlert(data){
alert(data);
}

比如這樣調用 doAjax("url","id=1",showAlert);
$.ajax 在success後,會返回一個data到showAlert中,顯示出來 ,沒有問題.
可是,當我想多傳一個參數給showAlert時怎麽寫?
寫成doAjax("server.php","id=12&type=1",showAlert("hi",data))、或者把上面的success:callback 寫成success:callback(msg,data)顯然都不行,如之奈何?

其實很簡單,很多方法都定義了回調函數,回調函數也是函數,就是說不管怎麽傳,只需要是個函數類型即可。寫法如下:

方式1,
doAjax(參數1,參數2,function(request,opts){
callback(request,opts,agrs);
});
function callback(request,opts,args){

};
方式2,
var args=N;
doAjax(參數1,參數2,function(request,opts){
var X=N;
回調函數代碼塊..
和以上幾乎一樣,看個人編碼方式選擇。
});
再看一個從父函數傳遞給回調函數的示例

function e(m,n,Callback){
var d = m+n;
alert("一個從父函數e 產生的參數將要被傳遞給回調函數 ,這個參數是:"+d);

//這裏才寫你想調用的函數---參數要正確
Callback(d);
}
function callback(data){
alert("我是回調函數,我的名字叫:callback ,我接收到來自父函數的參數,參數是:"+data);
}
e(1,2,callback)
最後
感謝各位的閱讀,如有問題麻煩及時指正出來。
---------------------
作者:月亮巡視人間
來源:CSDN
原文:https://blog.csdn.net/undericon/article/details/81188923
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

js的回調函數