回调函数

152 阅读1分钟

什么是回调函数?

一个函数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