什么是回调函数?
顾名思义,回调函数就是回头再调用它。回调函数其实就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。
下面是一个回调函数的简单例子:
//定义主函数,回调函数作为参数
function Main(callback) {
callback();
console.log('我是主函数');
}
//定义回调函数
function A(){
setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作
}
//调用主函数,将函数B传进去
Main(A);
//输出结果
我是主函数
我是回调函数
- 上面的代码中,我们先定义了主函数和回调函数,然后再去调用主函数,将回调函数传进去。
- 定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码,实现了异步编程的效果。
- 回调函数多用在使用 js 写组件时和耗时操作上面,尤其是组件的事件很多都需要回调函数的支持。
缺点
回调函数有一个致命的弱点,就是容易写出回调地狱(Callback hell)。假设多个请求存在依赖性,你可能就会写出如下代码:
ajax(url, () => {
// 处理逻辑
ajax(url1, () => {
// 处理逻辑
ajax(url2, () => {
// 处理逻辑
})
})
})
解决办法
解决回调地狱有很多方法,比如:Promise 对象、Generator 函数、async 函数。具体如何实现,不是本博要讲的内容,在之后的博中会一 一详细描述。