什麼是回撥

這是一個正常的函式呼叫:

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 在呼叫任一回撥之前返回。因此,即使在原始函式返回之後,也可以呼叫回撥函式。