什么是回调

这是一个正常的函数调用:

console.log("Hello World!");

当你调用普通函数时,它会完成其工作,然后将控制权返回给调用者。

但是,有时函数需要将控制权返回给调用者才能完成其工作:

[1,2,3].map(function double(x) {
    return 2 * x;
});

在上面的例子中,函数 double 是函数 map 的回调,因为:

  1. 函数 double 由调用者赋予函数 map
  2. 函数 map 需要调用函数 double 零次或多次才能完成其工作。

因此,函数 map 实质上是每次调用函数 double 时将控制权返回给调用者。因此,名为回调

函数可以接受多个回调:

promise.then(function onFulfilled(value) {
    console.log("Fulfilled with value " + value);
}, function onRejected(reason) {
    console.log("Rejected with reason " + reason);
});

这里函数 then 接受两个回调函数 onFulfilledonRejected。此外,实际上只调用这两个回调函数中的一个。

更有趣的是函数 then 在调用任一回调之前返回。因此,即使在原始函数返回之后,也可以调用回调函数。