クロージャ【closure】関数閉包

概要

クロージャとはプログラミング言語の機能の一つで、あるコードブロックの内側で定義された関数が、外側のブロックで宣言された変数を保持・参照し続けることができる仕組みのこと。そのような仕組みで生成された関数そのものを指す場合もある。
クロージャのイメージ画像

通常、関数からアクセスできる変数は、自身の引数、内部で宣言したローカル変数グローバル変数に限られる。関数の実行が終了すると、内部のローカル変数メモリから消滅するのが一般的である。

クロージャが有効な場合、外側の関数の内部でさらに別の関数を定義すると、内側の関数が外側のローカル変数への参照を保持し続ける。外側の関数の実行が終了した後でも、内側の関数を通じてその変数にアクセスし、値を読み書きすることができる。これを「変数の束縛」という。

この性質を利用すると、グローバル変数を使わずに関数単位で状態を保持したり、同じ処理に対して設定の異なるバリエーションを複数生成したりすることができる。オブジェクト指向言語におけるインスタンス変数カプセル化に似た効果を、関数だけで簡潔に実現できる。

関数を引数として受け取る高階関数に渡すコールバック関数もクロージャの一種である。定義された時点の変数環境ごと受け渡せるため、単純な関数よりも柔軟な処理が記述できる。非同期処理やイベント処理とも組み合わせて用いられる。実際に呼び出されるまで実行を遅らせる「遅延評価」にも対応しており、関数型プログラミングでは制御構造の定義にも応用される。

クロージャは関数型言語では中心的な機能の一つとされるが、近年では関数型言語の仕様や考え方を取り入れて関数を第一級オブジェクトとして扱う仕組みが導入された手続き型オブジェクト指向型の言語でも標準的に利用できるようになっている。対応言語としてはLispHaskellScalaのような関数型言語のほか、JavaScriptPythonRubySwiftKotlinGo言語Rustなどがある。

(2026.6.25更新)
 

他の辞典等による「クロージャ」の解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。