JavaScript基礎|コールバック関数・高階関数・匿名関数の違いと使いどころ

それぞれの関数の違いを処理を通して学ぶ

4/23/2025

🧠 ざっくり定義

用語

意味(カンタンに言うと)

コールバック関数

あとで実行される関数(引数として渡された関数)

高階関数

関数を受け取る or 関数を返す関数

匿名関数

名前のない関数(一時的・使い捨て)

🛠例え:ごはんを食べたあとにすること(片付け編)

誰かに「ごはん食べ終わったら片付けてね」とお願いしたいとする。
このとき、「ごはんを食べ終わったら◯◯する」という処理が条件付きの実行になる。

🍽 やりたいこと(共通処理)

function afterMeal(task) {
  const finishedEating = true; // ごはんを食べ終わったかどうか

  if (finishedEating) {
    task(); // ごはんを食べ終わったら、task(関数)を実行!
  }
}

ここでafterMealに渡される task は「あとで実行する関数」= コールバック関数
この afterMeal は「関数を引数で受け取って実行している」=高階関数

✅ 実行してみる!

🧹 例1:皿を洗う

関数washDishesを作成して、コールバック関数としてafterMeal関数の引数として渡す。

function washDishes() {
  console.log("お皿を洗う");
}

afterMeal(washDishes); // → 「お皿を洗う」と表示される
  • washDishesコールバック関数
  • afterMeal高階関数

先ほど作成した関数afterMeal(task)のtaskに、washDishes内の処理が渡っている。afterMealの関数内で行われるtask()の処理の中身は、washDishesの処理となる。

🔧 例2:匿名関数でその場でお願いする

afterMeal(function () {
  console.log("テーブルをふく");
});

これは 名前のない関数匿名関数(anonymous function)
その場でしか使わないから、名前はつけずに即座に実行させる。

🔁 コールバック関数 × 反復メソッド(forEach, map, filter)

コールバック関数は下記反復メソッド内で使われたりする。

.forEach() → 配列の各要素に繰り返し処理をする

・戻り値なし(配列を返さない)

const dishes = ["皿", "コップ", "スプーン"];

dishes.forEach(function(dish) {
  console.log(dish + " を洗う");
});

.map() → 配列の各要素を加工して新しい配列を作る

変換・加工して新しい配列を作ることができ、必ず戻り値が必要となる。

const dishes = ["皿", "コップ", "スプーン"];

const washedDishes = dishes.map(function(dish) {
  return dish + "(洗った)";
});

console.log(washedDishes);

.filter() → 条件に合うものだけを取り出す

条件に合う要素だけを抜き出す。戻り値はtrue/false(含めるか否か)を指定する。

const onlySpoons = dishes.filter(function(dish) {
  return dish.includes("スプーン");
});

console.log(onlySpoons);

📝 まとめ:JavaScriptでは「関数」を柔軟に扱えるのが特徴

「コールバック関数」「高階関数」「匿名関数」はセットでよく使用される。

用語

使いどころ

コールバック関数

イベント処理、非同期処理、反復処理など

高階関数

汎用的な処理の共通化、柔軟な実行制御

匿名関数

一時的な処理、すぐ実行して捨てたい関数に便利