什么是回调
这是一个正常的函数调用:
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 在调用任一回调之前返回。因此,即使在原始函数返回之后,也可以调用回调函数。