定义:回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。
例一:
function A(callback) {
console.log("主函数");
callback();
console.log("主函数2");
}
function B() {
console.log("回调函数");
setTimeout(function(){
console.log('我是回调函数')
}, 1000);
}
A(B);
输出:
主函数
回调函数
主函数2
我是回调函数
输出结果:说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。所以一般回调函数都用在耗时操作上面。比如ajax请求,比如处理文件等。
例二:
// 回调函数1
function A(x) {
return x * 2;
}
// 回调函数2
function B(x) {
return x * 3
}
// 中间函数
function middle(x, fun) {
return 100 + fun(x)
}
// 主函数
function main() {
var x = 2;
var a = middle(x, A);
var b = middle(x, B);
console.log(a);
console.log(b);
console.log(x);
}
main();
输出:
104
106
2
有上述内容我们就可以推导出回调函数执行的流程了:
主函数需要调用回调函数
中间函数登记回调函数
触发回调函数事件
调用回调函数
响应回调事件
回调实际上有两种:阻塞式回调 和 延迟式回调 也可以叫做 同步回调 和 异步回调
两者的区别在于:
在阻塞式回调里,回调函数的调用一定发生在主函数返回之前
在延迟式回调里,回调函数的调用有可能是在起始函数返回之后
上述示例均为 同步回调,异步需要用到多进程、多线程、协程这些概念