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