延續(同步和非同步)
回撥可用於提供方法完成後要執行的程式碼:
/**
 * @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 直譯器優化 。