「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
定义:
被作为实参传入另一函数,并在该外部函数内被调用,用以来完成某些任务的函数,称为回调函数
简单解释:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数
function a(name) {
console.log('hi ' + name);
}
function b(callback) {
var name = prompt('名字信息');
callback(name);
}
b(console);
作用:
由于浏览器的主进程是单线程事件循环,当客户端的JavaScript代码在浏览器中运行时,如果我们尝试在单线程事件循环中执行长时间运行的操作,则会阻止该过程。因为过程在等待操作完成时会停止处理其他事件。简单来说就是我们执行一个方法或函数时,为了防止长时间的操作,或者同时也需要进行其他的操作,通过调用回调函数的方式来执行。
常见的回调函数
- 定时器回调函数
- dom事件回调函数
- ajax请求回调函数
- 生命周期回调函数
回调函数与闭包的关系:
闭包:函数嵌套函数,内部函数可以访问外部函数的参数和变量
回调函数和闭包都能将函数作为变量传给另一个函数,回调函数能获取包含它的函数中的变量,以及全局作用域中的变量,回调函数本质上是一个闭包
回调函数的弊端
执行异步函数时,多层级的回调函数堆积容易导致回调地狱,影响性能和视觉体验
解决方式:promise、async,await