Callback function (コールバック関数)
コールバック関数は、引数として他の関数に渡され、外側の関数の中で呼び出されて、何らかのルーチンやアクションを完了させる関数のことです。
コールバックベースの API の利用者は、API に渡す関数を書きます。API の提供者(caller と呼ばれる)は関数を受け取り、呼び出し側の本体内のある時点で関数をコールバック(実行)します。呼び出し側はコールバック関数に正しい引数を渡す責任があります。また、呼び出し側はコールバック関数からの特定のな返値を期待することがあり、呼び出し側のさらなる動作を指示するために使用します。
コールバックの呼び出され方には、同期コールバックと非同期コールバックの 2 つの方法があります。同期コールバックは、外部関数の呼び出しの直後に呼び出され、非同期タスクは介在しません。一方、非同期コールバックは、非同期処理が完了した後のある時点で呼び出されます。
コールバックが同期的に呼び出されるのか、非同期的に呼び出されるのかを理解することは、 副作用を分析する際に具体的な意味があります。次の例を見てください。
let value = 1;
doSomething(() => {
value = 2;
});
console.log(value);
もし doSomething
がコールバックを同期的に呼び出すのであれば、value = 2
が同期的に実行されるので、最後の文は 2
をログ出力します。もしコールバックが非同期的であれば、value = 2
が実行されるのは console.log
文の後なので、最後の文は 1
をログ出力します。
同期コールバックの例としては、Array.prototype.map()
や Array.prototype.forEach()
などに渡されるコールバックが挙げられます。非同期コールバックの例としては、setTimeout()
や Promise.prototype.then()
に渡すコールバックがあります。
プロミスの使用ガイドには、非同期コールバックのタイミングについての詳しい情報があります。
関連情報
- コールバック(ウィキペディア)