1. 作品 3 件に連番を付ける
  2. 作品が 1 件だけ
  3. 短い名前でも動く
  4. 空配列のとき
コース一覧
JavaScript基礎文法:処理を組み立てる
コールバック関数

JavaScript基礎文法:処理を組み立てる

if・switch による条件分岐、配列とループ、関数とコールバック、オブジェクトを順に組み立てる全 33 レッスン(525 分)の基礎文法コースです。FizzBuzz、作品リスト、関数への整理、作品データの構造化を通して、入力から結果を返す処理を自分で分解して書きます。DOM 操作は次のコースで扱います。

1
条件分岐
01. if 文の基本15分
02. if / else if / else で段階判定15分
03. switch 文で値を一覧から選ぶ15分
04. 条件を組み合わせる20分
05. FizzBuzz で複数条件を組み立てる20分
06. つくる 時間帯で挨拶を変える20分
07. 第1章まとめクイズ10分
2
配列とループ
01. 配列のきほん15分
02. 要素を足す・取り除く15分
03. for ループで合計を求める15分
04. for-of で配列を走査する15分
05. while で条件を満たす間くり返す15分
06. break と continue でループを制御する15分
07. つくる 作品リストを一覧にする20分
08. 第2章まとめクイズ10分
3
関数
01. 関数宣言15分
02. アロー関数15分
03. デフォルト引数15分
04. 早期 return でネストを浅くする15分
05. 変数のスコープ15分
06. コールバック関数15分
07. forEach で配列をまわす15分
08. つくる 処理を関数に整理する20分
09. 第3章まとめクイズ10分
4
オブジェクト
01. オブジェクトのきほん18分
02. オブジェクトで複数の値を返す16分
03. const と参照18分
04. ?. で安全に取り出す16分
05. 分割代入18分
06. スプレッド構文18分
07. find と includes で探す16分
08. つくる 作品データを構造化する25分
09. 第4章まとめクイズ10分

コールバック関数

コールバックの渡し方
解説

このレッスンで分かること

  • JavaScript では関数を値として、変数に入れたり引数に渡したりできます
  • fn は関数そのもの、fn() は呼び出した結果です。渡すのは fn です

中の 1 行だけが違う関数を、何本も書くことになる

同じ形の関数を、中の 1 行だけ変えて何本も書く場面はすぐにやってきます。

JavaScript

function shout(text) { return text + "!!!"; } function polite(text) { return text + " 様"; }

処理そのものを渡せたら、受け取る側は 1 本で済みます。JavaScript の関数には、他の入門言語にはあまり無い特徴があります。関数が値として扱えることです。数値や文字列と同じように変数に入れられますし、引数として渡せます。

JavaScript

function decorate(text, fn) { return fn(text); } console.log(decorate("山田 太郎", shout)); // => 山田 太郎!!! console.log(decorate("山田 太郎", polite)); // => 山田 太郎 様

decorate は、受け取った fn を中で呼んでいるだけです。何をするかは呼ぶ側が決めます。渡す関数を差し替えれば、decorate を 1 文字も直さずに振る舞いが変わります。この、あとで呼んでもらうために渡す関数をコールバック関数と呼びます。

その場でしか使わないなら、変数に入れずに直接書けます。

JavaScript

console.log(decorate("山田 太郎", (text) => text + " さん")); // => 山田 太郎 さん

前のレッスンでアロー関数を学んだのは、この書き方のためでもあります。使い捨ての小さな処理を、その場で矢印 1 つで書ける。だからコールバックとアロー関数はいつも一緒に登場します。

丸カッコを付けた瞬間、渡すものが変わる

コールバックで最も多い事故が、渡すときに呼び出してしまうことです。

書き方意味
shout関数そのもの
shout("公開中")呼び出した結果。ここでは文字列

shout はレシピ、shout("公開中") は作った料理です。レシピを渡してほしい相手に料理を渡すと、受け取った側は fn(text) と呼ぼうとして、文字列は呼べないというエラーになります。

JavaScript

decorate("山田 太郎", shout); // OK 関数そのものを渡している decorate("山田 太郎", shout()); // NG その場で実行され、戻り値が渡る

何が渡ってくるかは、呼ぶ側が決める

コールバックを呼ぶのは受け取った側なので、引数を渡すのも受け取った側です。

JavaScript

function twice(text, fn) { return fn(text) + "/" + fn(text); } console.log(twice("公開中", (t) => "[" + t + "]")); // => [公開中]/[公開中]

コールバックに何が何番目で渡ってくるかは、渡し先の関数の仕様しだいです。自分で書いた関数なら自分で決められますが、用意されている関数に渡すときは、必ず確かめてから受け取る引数を書いてください。

よくある間違い

  • コールバックの中で return を書き忘れる — (text) => { text + " さん"; } は undefined を返します。{ } を書いたら return が要る、というアロー関数のルールがそのまま効きます
  • 渡ってくる値と合わない名前を付ける — 要素が渡ってくるのに index という名前で受けても、エラーにはなりません。動いてしまうぶんだけ、読む人は確実に混乱します

要件

  1. 配列とコールバックを受け取る関数 applyAll(arr, fn) を用意すること
  2. applyToWorks は applyAll にアロー関数のコールバックを渡すこと
  3. コールバックは要素とインデックスを受け取り、連番. 作品名 の文字列を返すこと
  4. applyToWorks は文字列の配列を return し、空配列なら空配列を返すこと

入出力例

applyToWorks(["プロフィールサイト","自己紹介カード","スキル一覧の表"]) → ["1. プロフィールサイト","2. 自己紹介カード","3. スキル一覧の表"] applyToWorks(["プロフィールサイト"]) → ["1. プロフィールサイト"] applyToWorks(["A","B"]) → ["1. A","2. B"] applyToWorks([]) → []

ヒント

applyAll はループを担当し、各要素にコールバックを適用して結果を集めるだけの関数です

applyAll の中では `result.push(fn(arr[i], i))` のようにコールバックを呼びます

渡すのは fn であって fn() ではありません。丸括弧を付けるとその場で実行されてしまいます

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • forEach で配列をまわす

    配列の各要素に対してコールバック関数を順番に呼んでくれるメソッドを学びます。作品一覧の組み立てを forEach で書き直します。

  • つくる 処理を関数に整理する

    第6章で学んだ関数の書き方を総動員して、プロフィールページの文字列を組み立てます。挨拶と作品一覧を別々の関数に分けるのがポイントです。

  • 第3章まとめクイズ

    第6章で学んだ関数宣言とアロー関数、デフォルト引数、ガード節、スコープ、コールバックと forEach を 5 問で確認します。

  • オブジェクトのきほん

    関連する値をひとつの箱にまとめる入れ物がオブジェクトです。作成とプロパティの読み書きを身に付けます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 関数処理に名前を付けて再利用できる単位
  • 変数データに名前をつけて参照する仕組み
  • 引数位置引数=順番で渡す。
  • 処理計算や代入を表す長方形
  • コールバック子から親へ通知するための関数 props
  • コールバック関数他の関数に引数として渡される関数。
  • アロー関数=> で書く軽量な関数。this を継承する
  • 配列サイズ固定の同型データの集まり
main.js
学習モード
エディタを読み込んでいます

メモ

コールバック関数

⌘S で保存