【こーるばっく】

コールバック とは?

最終更新:
💡 このとき呼んで、と渡しておく関数

別の関数やAPIへ渡し、決められたタイミングで呼び出してもらう関数。クリックなどのイベントや非同期処理だけでなく、配列の処理のように同期的に呼ばれる例もある。いつ呼ばれるかは、受け取るAPIの仕様で決まる。

📌 このページのポイント
コールバック:呼ぶタイミングはAPI次第呼んでほしい関数を渡す同期の例forEach各要素の処理で呼ぶ非同期の例setTimeout後のタイミングで呼ぶ「渡した関数」がコールバック
JavaScriptでの比較。forEachは各要素の処理中、setTimeoutは後のタイミングで渡した関数を呼びます。
ひよこ ひよこ
どうして関数を渡すの?
ペンギン先生 ペンギン先生
呼び出す側が「そのとき何をするか」を指定できるからだよ。ボタンなら「クリックされたら表示を変える」といった関数を登録する。イベントのたびに呼ばれることもあるんだ。
ひよこ ひよこ
終わるまで待ってから呼ぶもの?
ペンギン先生 ペンギン先生
それだけではないよ。Array.forEachに渡した関数は、各要素の処理で同期的に呼ばれる。setTimeoutに渡した関数やPromiseのthenへ渡す関数は、後のタイミングで呼ばれるよ。
ひよこ ひよこ
関数の名前の後ろに()を付けて渡す?
ペンギン先生 ペンギン先生
()を付けると、その場で関数を実行して戻り値を渡す形になるね。あとから呼んでほしいなら、通常は関数そのものを渡す。どんな引数や戻り値が必要かは、受け取るAPIの説明を確認しよう。
ひよこ ひよこ
fetchにもコールバックを渡すの?
ペンギン先生 ペンギン先生
fetchはPromiseを返すAPIだよ。結果を受け取る関数は、そのPromiseのthenに渡せる。fetchの第2引数はリクエストの設定で、コールバックではないんだ。async/awaitで結果を待つ書き方もあるね。
ひよこ ひよこ
コールバック地獄はどうするの?
ペンギン先生 ペンギン先生
処理を次々と内側へ書くと、順序やエラー処理が読みにくくなることがある。Promiseやasync/awaitは非同期処理を整理する方法になるよ。ただし同期の配列処理やイベントなど、コールバックが役立つ場面も残るんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コールバック」って出てきたら「決まったタイミングで呼んでもらうために渡す関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「Callback」 = 呼び返すこと
💬 折り返し連絡のように、渡した関数を受け取った側が呼ぶイメージ。ただし、非同期で待った後に限らず、同期的に呼ぶコールバックもあるよ。

参考資料

← 用語集にもどる