1.stack overflow 上大神的描述(瀏覽的網頁沒記住):函數
A "callback" is any function that is called by another function which takes the first function as a parameter.spa
2.看了幾天的介紹,本身關於回調的簡單理解:線程
1)爲了幹成某件事,本身創建模塊A,而後在A裏有一個函數f1負責具體實現某項功能;事件
2)來自其餘地方的模塊B已經具有A須要的部分基本功能,B裏有個函數 f2(通常爲API);get
3)A要快(tou)速(lan)實現既定功能,就直接套用B。所以調用 B中的f2 ,同時將f1的地址做爲參數傳遞給了f2;回調函數
4)f2在適當時候會調用 f1,這樣f1就依託B爲基礎把事情幹成。string
5)f1即爲回調函數。it
3.引用知乎上的例子io
1)例子1(做者:Mao Bravo;連接:https://www.zhihu.com/question/19801131/answer/91780287;來源:知乎):function
function openFile(filePath,callback){
alert('start opening file in'+filePath);
callback();//when finished,execute callback()
}
function writeToFile(){
alert('i'm now writing file');
}
openFile('c://test.csv',writeToFile);
若是咱們在調用openFile 這個例子,咱們先會收到 start opening file in c://test.csv ,而後會收到 i'm now writing file 這不須要你call 它。
在你open file 結束以後就會被自動執行了。
2)例子2(做者:朱栩 連接:https://www.zhihu.com/question/19801131/answer/17312995 來源:知乎)
你去食堂打飯,你喜歡吃小炒熱飯菜,因此你去了一個小炒窗口。你跟老闆說了要×××蓋飯,老闆說:你是100號,喊到你的號你就來拿菜。然 後你在旁邊跟同窗吹牛、或者看手機、或者乾點你想幹的任何事情。。。而後你聽到老闆喊100號而且把菜放到窗口,你走到窗口,拿到你的菜。這裏面有幾個函數:老闆的部分: I、老闆提供一個點餐的函數 boss.Order(string 菜名,double 錢) II、老闆有個作飯的函數,此函數耗時較長boss.Cook() III、老闆提供一個事件,當boss.cook()執行完時,該事件被觸發,boss.OnCookFinish;你的部分: I、你須要有一個函數去訂餐,也就是你的函數中須要執行相似於boss.Order("紅燒肉蓋澆飯",20),好比是me.Hungry() II、你須要有一個函數做爲回調函數去關注boss.OnCookFinish事件,這樣當老闆作好飯,你就能夠知道是否是你的好了。因爲老闆的事件發生的時候中會喊編號而且吧菜放到窗口,因此你的回調函數須要可以接受1個編號和1個菜做爲參數。好比me.AcceptFood(int currNumber,object food)因此整個程序的流程實際上是這樣的。me.Hungry(){ boss.Order("紅燒肉蓋澆飯",20); boss.OnCookFinish+=me.AcceptFood;//此處表面,AcceptFood這個回調函數關心OnCookFinish事件,而且變成這個事件的回調函數 //此時這個函數執行完,再也不等待}boss.Order("紅燒肉蓋澆飯",20){ //收錢 //配菜 前2個耗時較短 boss.Cook();//此處通常會開新線程執行cook動做}boss.Cook(){ //cooking~~~~~~~~~~ //完成了,下面將要觸發事件,系統將檢查這個事件是否有回調函數關心,有的話逐個回調。 OnCookFinish(100號,紅燒肉蓋澆飯);}至此案例基本完成了一個完整的任務流程。