カテゴリ: JavaScript 更新日: 2026/05/12

JavaScriptのコールバック関数の書き方と基本構文を初心者向けに解説!簡単に理解できるサンプル付き

JavaScriptのコールバック関数の書き方と基本構文まとめ
JavaScriptのコールバック関数の書き方と基本構文まとめ

先生と生徒の会話形式で理解しよう

生徒

「先生、JavaScriptで『コールバック関数』ってよく聞くんですけど、何ですか?」

先生

「コールバック関数とは、他の関数の中で呼び出される関数のことです。簡単に言うと、後で実行される関数ですね。」

生徒

「後で実行されるってどういう意味ですか?」

先生

「例えば、ある作業が終わったら次に何をするか決めたいときに使います。手順を順番に決めるのに便利です。」

生徒

「具体的な書き方も見たいです!」

先生

「では、基本の書き方からサンプルを見ていきましょう。」

1. コールバック関数とは?

1. コールバック関数とは?
1. コールバック関数とは?

コールバック関数は、関数に渡しておいて必要なタイミングで呼び出される関数です。JavaScriptでは、非同期処理や配列操作など、さまざまな場面で利用されます。基本は「関数を引数として渡す」だけです。

2. コールバック関数の基本構文

2. コールバック関数の基本構文
2. コールバック関数の基本構文

コールバック関数の基本構文はとてもシンプルです。以下のように書きます。


function greet(name, callback) {
  console.log("こんにちは、" + name + "さん!");
  callback();
}

function sayGoodbye() {
  console.log("さようなら!");
}

greet("太郎", sayGoodbye);

この例では、sayGoodbyeがコールバック関数です。greet関数が実行された後にsayGoodbyeが呼ばれます。

3. 無名関数を使ったコールバック

3. 無名関数を使ったコールバック
3. 無名関数を使ったコールバック

コールバック関数は名前を付けずにその場で書くこともできます。これを無名関数(anonymous function)と呼びます。


setTimeout(function() {
  console.log("3秒経ちました!");
}, 3000);

この例では、3秒後に無名関数が実行されて「3秒経ちました!」と表示されます。setTimeoutの第一引数がコールバック関数です。

4. 配列操作でのコールバック関数

4. 配列操作でのコールバック関数
4. 配列操作でのコールバック関数

JavaScriptでは配列のforEachmapなどでもコールバック関数を使います。


const fruits = ["りんご", "みかん", "バナナ"];

fruits.forEach(function(fruit, index) {
  console.log(index + "番目のフルーツは" + fruit);
});

この場合、forEachが配列の各要素に対してコールバック関数を順番に実行します。

5. アロー関数で簡単に書く

5. アロー関数で簡単に書く
5. アロー関数で簡単に書く

ES6以降では、アロー関数を使うことでさらに簡単にコールバック関数を記述できます。


const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
console.log(doubled);

この例では、mapのコールバック関数をアロー関数で書き、配列の要素を2倍にしています。

6. 複数の処理を順番に行うコールバック

6. 複数の処理を順番に行うコールバック
6. 複数の処理を順番に行うコールバック

コールバック関数は順番に処理を行うときにも便利です。例えば、データを取得してから処理する場合などです。


function firstTask(callback) {
  console.log("最初の処理を実行中...");
  callback();
}

function secondTask() {
  console.log("次の処理を実行!");
}

firstTask(secondTask);

この例では、firstTaskの処理が終わったあとにsecondTaskが呼ばれます。手順を順番に制御できるのが特徴です。

7. 非同期処理でのコールバックの重要性

7. 非同期処理でのコールバックの重要性
7. 非同期処理でのコールバックの重要性

JavaScriptは非同期処理が多く、例えばデータの読み込みやタイマー処理などです。非同期処理では、コールバック関数を使うことで「処理が終わったあとに次の処理」を安全に行えます。


console.log("処理開始");

setTimeout(() => {
  console.log("非同期処理完了");
}, 2000);

console.log("処理終了");

実行すると、「処理開始」「処理終了」のあとに2秒後「非同期処理完了」が表示されます。ここでセットした関数がコールバックです。

8. コールバック関数の注意点

8. コールバック関数の注意点
8. コールバック関数の注意点

コールバック関数は便利ですが、ネストが深くなると「コールバック地獄」と呼ばれる読みづらいコードになることがあります。その場合は、Promiseやasync/awaitを使った書き方も検討しましょう。

まとめ

まとめ
まとめ

JavaScriptのコールバック関数は、関数を引数として渡し、必要なタイミングで呼び出される関数のことです。基本構文はとてもシンプルで、関数を渡して呼び出すだけでさまざまな処理を順番に制御できます。今回の記事では、基本的な書き方、無名関数での記述、配列操作での活用、アロー関数を使った簡略化、複数の処理の順番制御、非同期処理での重要性、そして注意点までを解説しました。特に非同期処理や配列操作では、コールバック関数を使うことで処理の流れを管理しやすくなります。また、ネストが深くなると可読性が下がるため、状況によってPromiseやasync/awaitを活用することも理解しておくと良いでしょう。これらの基本を押さえることで、JavaScriptのプログラミングがより直感的に、そして効率的に行えるようになります。

サンプルプログラムの振り返り

記事で紹介したサンプルを振り返ると、コールバック関数の動作がイメージしやすくなります。


function greet(name, callback) {
console.log("こんにちは、" + name + "さん!");
callback();
}

function sayGoodbye() {
console.log("さようなら!");
}

greet("太郎", sayGoodbye);

このコードでは、greet関数の処理が終わった後にsayGoodbyeが呼ばれます。手順の制御や後処理のタイミングを理解するのに役立ちます。


setTimeout(function() {
console.log("3秒経ちました!");
}, 3000);

無名関数を使った例では、setTimeoutに渡した関数が指定した時間経過後に実行されます。非同期処理の基本的な考え方が学べます。


const fruits = ["りんご", "みかん", "バナナ"];
fruits.forEach(function(fruit, index) {
console.log(index + "番目のフルーツは" + fruit);
});

配列操作では、各要素に対して順番に処理が行われます。forEachmapでコールバック関数を活用することで、配列のデータ操作が効率的になります。


const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
console.log(doubled);

アロー関数を使うことで、短く簡潔に書けることも覚えておきましょう。可読性を高めつつ、処理を明確に表現できます。

先生と生徒の振り返り会話

生徒

「先生、コールバック関数の基本的な使い方は理解できました。でも、どの場面で使うのが一番便利なんですか?」

先生

「それは非同期処理や順番に処理を行いたい場合です。例えば、データをサーバーから取得した後に表示したいときや、ユーザー操作に応じて次の処理を行いたいときに便利です。」

生徒

「なるほど。配列操作でも使えるんですね。forEachやmapで要素を操作する場合もコールバック関数を渡すんですよね?」

先生

「その通りです。コールバック関数を使うことで、配列の各要素に対して同じ処理を順番に実行できます。また、アロー関数を使えばコードも短く書けます。」

生徒

「でも、ネストが深くなると読みづらくなるって聞きました。それを避ける方法はありますか?」

先生

「そうですね。コールバック地獄と呼ばれる状態です。その場合はPromiseやasync/awaitを使うことで、コードをフラットにして読みやすくすることができます。」

生徒

「Promiseやasync/awaitも使えるようになれば、非同期処理をもっと簡単に書けるんですね!」

先生

「その通りです。コールバック関数の基本を理解したら、次はPromiseやasync/awaitに挑戦してみましょう。そうするとJavaScriptの非同期処理の幅がぐんと広がります。」

生徒

「今日はコールバック関数の基本から応用まで学べて、とても勉強になりました!」

先生

「よく理解できましたね。コールバック関数を使いこなせるようになると、JavaScriptのプログラミングがさらに楽しくなりますよ。」

カテゴリの一覧へ
新着記事
New1
TypeScript
TypeScriptの関数に型をつける方法(引数・戻り値)を初心者向けに徹底解説!
New2
TypeScript
TypeScriptの始め方:開発環境の構築手順【初心者向け】
New3
TypeScript
TypeScriptでExpressのミドルウェアを型安全に定義する方法!バックエンド開発の初心者向け解説
New4
JavaScript
JavaScriptのfilterメソッドで条件に合う要素を抽出する方法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptでフォームの値を取得する方法を徹底解説!valueプロパティの使い道
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptでHTML5バリデーションAPIを使いこなす!初心者でもわかるフォーム入力チェック
No.3
Java&Spring記事人気No3
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.4
Java&Spring記事人気No4
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptで要素を削除する方法(removeChild, removeなど)
No.7
Java&Spring記事人気No7
JavaScript
JavaScriptの現在日時を取得する方法を完全ガイド!初心者でもわかるDate.now()とnew Date()
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptでオブジェクト指向のカプセル化を学ぶ!初心者でもわかるクラスとプロパティの保護方法