定义
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed
回调函数就是一个函数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。
字面理解
回调,回调,就是回头调用的意思。主函数的事先干完,回头再调用传进来的那个函数。
举例
举一个别人举过的例子:约会结束后你送你女朋友回家,离别时,你肯定会说:“到家了给我发条信息,我很担心你。” 对不,然后你女朋友回家以后还真给你发了条信息。小伙子,你有戏了。其实这就是一个回调的过程。你留了个参数函数(要求女朋友给你发条信息)给你女朋友,然后你女朋友回家,回家的动作是主函数。她必须先回到家以后,主函数执行完了,再执行传进去的函数,然后你就收到一条信息了。
打个比方,有一家旅馆提供叫醒服务,但是要求旅客自己决定叫醒的方法。可以是打客房电话,也可以是派服务员去敲门,睡得死怕耽误事的,还可以要求往自己头上浇盆水。这里,“叫醒”这个行为是旅馆提供的,相当于库函数,但是叫醒的方式是由旅客决定并告诉旅馆的,也就是回调函数。而旅客告诉旅馆怎么叫醒自己的动作,也就是把回调函数传入库函数的动作,称为登记回调函数(to register a callback function)
异步与同步
- 主函数不用等待回调函数执行完,可以接着执行自己的代码,这里是因为callback函数是异步的
- 如果callback函数是同步的,则主函数还是要等待回调函数执行完,再执行自己的代码
应用
所以一般回调函数都用在耗时操作上面。比如ajax请求,比如处理文件等。
js的事件循环是先把同步任务放入主线程中执行,异步任务放入Event table去注册函数,注册好后再放入Event Queue中等待同步任务结束,同步任务结束后,才将Event Queue中的任务移入到主线程执行