什麼是回撥
這是一個正常的函式呼叫:
console.log("Hello World!");
當你呼叫普通函式時,它會完成其工作,然後將控制權返回給呼叫者。
但是,有時函式需要將控制權返回給呼叫者才能完成其工作:
[1,2,3].map(function double(x) {
return 2 * x;
});
在上面的例子中,函式 double
是函式 map
的回撥,因為:
- 函式
double
由呼叫者賦予函式map
。 - 函式
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
接受兩個回撥函式 onFulfilled
和 onRejected
。此外,實際上只呼叫這兩個回撥函式中的一個。
更有趣的是函式 then
在呼叫任一回撥之前返回。因此,即使在原始函式返回之後,也可以呼叫回撥函式。