レプリカ


1.Closerとは?


MDN定義によると、以下のようになります.
「関数とその宣言時の語彙環境との相互関係により、キャビネットでこの現象が発生しました.」
一度も触れずに別の文章を持ってきた.
ある日実行時に使用する変数のみを覚え、作成時にスキャンで表示される関数です.
[出典:劉仁東,『関数式JavaScriptプログラミング』,in Site(p 31)]

2.わかりやすい基礎形態

var outer = function() {
    var a = 1;
    var inner = function() {
        return ++a;
    };
    return inner;
}

var outer2 = outer();

console.log(outer2()); //2
console.log(outer2()); //3
callスタックストリームによれば,本来の関数は実行終了後に実行コンテキストが消失し,ゴミ収集によってメモリから削除されるべきである.
しかし,上のコードから見ると,内部変数aは消えず,その値を維持し続け,影響力を発揮し続けている.
つまり、今のところもっと役に立つと思っているので、ゴミ収集をなくすことができず、多くの工夫を残しています.

3.再確立


このように、Closerとは、「ある関数Aを参照して宣言した変数Aの内部関数Bを外部に渡すと、Aの実行コンテキストが終了しても変数Aは消えない」という現象である.

4.使用箇所


他の使い方もありますが、最も直接的な観点から情報を隠すことができます.
ある関数に公開したい情報があり、公開したくない情報があると仮定します.
公開したくない情報に他人が勝手にアクセスして値を変更しないように、これらを隠して、返された情報だけを使って外に表示することができます.
結論:データ保存とモジュール化