AI活用の教科書
バックエンドむずかしい3分で読了

クロージャ

Closureくろーじゃ

ひとことで言うと

関数が、生まれた場所の周りの変数を覚えたまま持ち歩く仕組みのことです。

📖 もうちょい詳しく

何が新しいの?

ふつう関数は、呼び出されて仕事が終わると、その中で使った変数(データを入れておく名札)は消えてしまいます。クロージャは、関数が「自分が作られたときの周りの変数」をそのまま覚えておける仕組みです。おかげで、関数が外に持ち出されても、生まれた場所の状態を連れて歩けます。

どうやって動いてるの?

関数を作ると、その関数は「自分の外側にあった変数」への通り道をいっしょに抱えます。あとでその関数を別の場所で呼び出しても、覚えていた変数を読んだり書き換えたりできます。関数本体と、その関数が見ていた周りの変数たちを、ひとまとめにしたものがクロージャです。

何ができるの?

たとえば「呼ばれるたびに1ずつ増えるカウンター」を、外から数字を触れない形でしまっておけます。ボタンが押されたあとに動く処理(コールバック)に、押した時点の値を覚えさせるのにも使われます。設定だけ先に渡して、あとで実行する関数を作るときにも便利です。

🌱 身近なたとえ

鍵のかかった引き出しと、その引き出しを開けられる人で例えると分かりやすいです。引き出し(変数)の中身は外からは見えませんが、担当の人(関数)だけは中を出し入れできます。担当の人を別の部屋へ移しても、その人はちゃんと自分の引き出しを覚えていて、いつでも開けられます。中身を直接いじられないので、状態を安全にしまっておけます。

✅ まず覚えるポイント

  • クロージャ=「関数」+「その関数が覚えている周りの変数」のセットです。
  • 関数が作られた場所の変数を、あとからでも読み書きできます。
  • ふつうは消えるはずの変数を、生かしたまま持ち歩けます。
  • 外から直接触れない「閉じた状態」を作れます。
  • カウンターや設定の保持、コールバックでよく登場します。
  • JavaScriptをはじめ、多くの言語で使える考え方です。

🧭 よくある勘違い

クロージャって特別な書き方が必要なの?

専用の命令があるわけではないことが多いです。関数の中で関数を作り、外側の変数を使うと、自然にクロージャになります。意識しないうちに使っていることもよくあります。

覚えているのは「値のコピー」なの?

コピーではなく、変数そのものへの通り道を覚えています。なので、あとでその変数の中身が変われば、クロージャから見える値も変わります。スナップショット(その瞬間の写し)ではない点に注意です。

グローバル変数と何が違うの?

グローバル変数は誰でも触れますが、クロージャの変数は外から直接さわれません。特定の関数だけがアクセスできるので、安全に状態を閉じ込められるのが違いです。

🧩 関連して覚えると楽な言葉

  • 関数(function): ひとまとまりの処理に名前を付けて、何度でも呼び出せるようにしたものです。
  • オブジェクト指向(object-oriented): 関わりのあるデータと操作を「モノ」ひとつにまとめる考え方です。状態を外から触れない形で閉じ込める発想が、クロージャと近いです。
  • 変数(variable): データを入れておく名札付きの箱のことです。
  • コールバック(callback): あとで実行してほしい処理を、関数として渡しておく仕組みです。

🏁 ひとことでまとめ

関数が、自分の生まれた場所の変数をかばんに入れて持ち歩ける仕組み。それがクロージャです。