快速理解什么是回调函数?

554 阅读1分钟

回调函数概念

回调函数是一个作为参数传递给另一个函数的函数,它在主体函数执行完之后再执行。它是解决异步问题的方案之一。

// 定时器回调函数
const log1 = () => {
    console.log(1)
}
setTimeout(log1, 1000);

// 将匿名函数作为参数传递给了另一个函数或方法
var friends = ["Mike""Stacy""Andy""Rick"];
friends.forEach(function (eachName, index){
  console.log(index + 1". "+ eachName); // 1. Mike, 2. Stacy, 3. Andy, 4. Rick

});

回调函数特点

1、不会立即执行

回调函数作为参数传递给一个函数的时候,传递的只是函数的定义并不会立即执行。和普通的函数一样,回调函数在调用函数中也要通过()运算符调用才会执行。

2、回调函数是一个闭包

回调函数是一个闭包,也就是说它能访问到其外层定义的变量。

3、执行前类型判断

在执行回调函数前最好确认其是一个函数。

function add(num1, num2, callback) {
    var sum = num1 + num2;
    //判定callback接收到的数据是一个函数
    if (typeof callback === 'function') {
        //callback是一个函数,才能当回调函数使用
        callback(sum);
    }
}

回调函数的缺点

  • 回调函数有一个致命的弱点,就是容易写出回调地狱(Callback hell),回调地狱表现为:
    • 嵌套函数存在耦合性,一旦有所改动,就会牵一发而动全身
    • 嵌套函数一多,就很难处理错误
  • 不能使用 try catch 捕获错误
  • 不能直接 return

常见的回调函数

  • DOM事件回调函数
  • 定时器回调函数
  • ajax 请求回调函数
  • 生命周期回调函数

如何解决回调函数?

  • promise
  • async/await
  • generator