回调函数
**回调函数** 是一个传递给另一个函数作为参数的函数,该函数会在外部函数内部被调用以完成某种例程或操作。
基于回调的 API 的使用者会编写一个传递给 API 的函数。API 的提供者(称为调用者)会接收该函数并在调用者主体内部的某个时间点回调(或执行)该函数。调用者负责向回调函数传递正确的参数。调用者还可能期望从回调函数获得特定的返回值,该返回值用于指导调用者的进一步行为。
回调可以以两种方式调用:同步 和异步。同步回调在外部函数调用后立即调用,没有中间的异步任务,而异步回调在稍后的某个时间点调用,在异步操作完成之后。
在分析副作用时,了解回调是同步调用还是异步调用尤为重要。考虑以下示例
js
let value = 1;
doSomething(() => {
value = 2;
});
console.log(value);
如果doSomething
同步调用回调,则最后一条语句将记录2
,因为value = 2
是同步执行的;否则,如果回调是异步的,则最后一条语句将记录1
,因为value = 2
仅在console.log
语句之后执行。
同步回调的示例包括传递给Array.prototype.map()
、Array.prototype.forEach()
等的回调。异步回调的示例包括传递给setTimeout()
和 Promise.prototype.then()
的回调。
使用 promises 指南中提供了有关异步回调时间安排的更多信息。
另请参阅
- 回调 on Wikipedia