エンジニアを目指す初学者に向けて、わかりやすく解説したブログです。

コールバック関数とは

概要

引数に渡される関数のこと。

引数で渡すことによって、「処理の中身は決めておいたから、そっち側で呼び出してくれ」ができる。

代表的な例:setTimeout

JavaScriptでよく見かける setTimeout関数はコールバック関数を利用するわかりやすい関数である。

書式は以下の通り。

setTimeout(コールバック関数, 遅延させるミリ秒);
  • 第一引数:これがコールバック関数。ここに、第二引数に指定したミリ秒が過ぎたら実行したい処理を入れる
  • 第二引数:コールバック関数を実行するタイミングを指定する

実装例

// 「hello」と出力するだけの関数を定義
function greet() {
  console.log('hello');  
}

// 2000ms(2秒)後にgreetを実行する
setTimeout(greet, 2000);

ポイント①:引数に入れられるのは変数だけではない

プログラミングの入門書を読んだばかりの場合は慣れないかもしれないが、
関数の引数には、変数(文字列や数値が入ったもの)だけではなく、関数も入れることができる。

プログラミングの入門書では、難しくてこの話は省略されていることが多いので
初めて遭遇したときはぎょっとするかもしれない。

ポイント②:処理は自分で定義し、呼び出しは相手に任せる

コールバック関数のポイントは、その呼び出しタイミングや呼び出し方を完全に相手側に任せるという点である。

  • コールバック関数の処理の内容:こちら側で自由に定義する(例: greet関数は自分で定義する)
  • コールバック関数の呼び出すタイミング:渡した先で定義されている(例: setTimeout関数が呼び出すタイミングを決める)
    • コールバック関数に引数があれば、引数の内容なども setTimeout関数が決める

ポイント③:省略記法で書かれることも多い

コールバック関数はわざわざ関数名を定義せずに、引数にそのまま関数定義が書かれている事がある。

(およそその場限りの処理で、再利用することがないため)

以下も同じ実装であることを認識しておく必要がある。

// 2000ms経過したら、「hello」と表示する
setTimeout(() => console.log('hello'), 2000);

参考: 📄Arrow icon of a page link【JavaScript】まずはこれだけ覚えておけば良い関数の書き方3種類

まとめ

  • そもそも関数の引数には、変数だけではなく関数を入れることができる
  • コールバック関数は、関数の引数に入れられた関数である
  • 処理の内容は自分で定義し、呼び出し方を相手に任せるために引数を使って渡す
  • 省略して書かれている場合は、丁寧に書き直してみると理解しやすい