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号,红烧肉盖浇饭);}至此案例基本完成了一个完整的任务流程。