什么是回调函数?
一个函数A作为参数在另外一个函数B中被调用执行。
A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.
function A(msg,callback){
setTimeout(()=>{
callback();
console.log(msg);
},2000)
}
function B(){
console.log('lalalala');
}
A('hello~~~',B);
// lalalala
// hello~~~
回调函数的应用
- 资源加载
- 动态加载js文件后执行回调,加载iframe后执行回调,ajax操作回调,图片加载完成执行回调,AJAX等等。
- 链式调用
- 链式调用的时候,在赋值器(setter)方法中(或者本身没有返回值的方法中)很容易实现链式调用,而取值器(getter)相对来说不好实现链式调用,因为你需要取值器返回你需要的数据而不是this指针,如果要实现链式方法,可以用回调函数来实现。
- setTimeout、setInterval的函数调用
回调地狱
回调地狱就是回调函数层层嵌套。回调地狱会造成代码的可复用性不强、可阅读性差等。
setTimeout(function () { //第一层
console.log(111);
setTimeout(function () { //第二程
console.log(222);
setTimeout(function () { //第三层
console.log(333);
}, 1000)
}, 2000)
}, 3000)
回调地狱解决方案
- Promise
- 状态改变
- pending(进行中)→ resolved(成功)
- pending → rejected(失败)
- 原理:通过在then中返回一个promise对象来解决回调地狱。
- 状态改变
- async/await