延续(同步和异步)
回调可用于提供方法完成后要执行的代码:
/**
* @arg {Function} then continuation callback
*/
function doSomething(then) {
console.log('Doing something');
then();
}
// Do something, then execute callback to log 'done'
doSomething(function () {
console.log('Done');
});
console.log('Doing something else');
// Outputs:
// "Doing something"
// "Done"
// "Doing something else"
上面的 doSomething()
方法与回调同步执行 - 执行块直到 doSomething()
返回,确保在解释器移动之前执行回调。
回调也可用于异步执行代码:
doSomethingAsync(then) {
setTimeout(then, 1000);
console.log('Doing something asynchronously');
}
doSomethingAsync(function() {
console.log('Done');
});
console.log('Doing something else');
// Outputs:
// "Doing something asynchronously"
// "Doing something else"
// "Done"
then
回调被认为是 doSomething()
方法的延续。提供回调作为函数中的最后一条指令称为尾调用 ,由 ES2015 解释器优化 。