JavaScriptの「クロージャ」の定義を クロージャを一言で表すと (読書メモ) にてメモしましたが、今読み進めている別の良書でも見つけたので、こちらも備忘のため書き写しておきます。
以下のサンプルコードおよび説明は、オライリー刊シングルページWebアプリケーション P.60 第2章 2.6.3.1 「クロージャとは」からの引用です。
var prison = (function() {
var prisoner = 'Josh Powell';
return {
prisoner: function() {
return prisoner;
}
}
})();
//「Josh Powell」と出力する
console.log(prison.prisoner());
いよいよ「クロージャとは何か」という質問に答えよう。クロージャは、変数を作成した実行コンテキスト外から変数にアクセスできるようにしておくことで、ガベージコレクタがメモリから変数を削除しないようにするプロセスである。クロージャは、prisonオブジェクトにprisoner関数を格納したときに作成される。(ガベージコレクタがprisoner変数を削除するのを防ぐ) 現在の実行コンテキスト外からのprisoner変数への動的アクセスを伴う関数を格納することで、クロージャは作成される。