閉じたパッケージを簡単に理解

1736 ワード



    JavaScript       :
function counter(){
var n=0;
return {counter: function(){ return n++;
},
reset: function(){ n = 0;}
 
};
}


var c = counter(), d = counter();

c.count();
d.count();
c.reset();
d.reset();

閉パッケージの定義:
閉パッケージとは、別の関数の役割ドメイン内の変数にアクセスする権限を持つ関数です.【JavaScriptプレミアムプログラミング】
関数オブジェクトは、作用ドメインチェーン(関数の実行は変数作用ドメインに依存し、関数定義は決定)によって相互に関連付けられ、関数体内の変数は関数作用ドメインに保存され、この特性を閉パケット(関数も閉パケット)と呼ぶ.【JavaScript権威ガイド】
閉パッケージでthisを使用すると、次のようなエラーが発生しやすくなります.
var test = function(){
var name = "inner";
output : function(){
 return this.name;
}
}
var name = "outer";
test.output(); //"outer"

これは、外部関数にパッケージを閉じるときに内部のthisを参照(保存)できないため、関数をinnerに出力するには、thisを保存する必要があります.
JavaScript権威ガイドのコードを参照します.
var test = function(){
var name = "inner";
var that = this;
output : function(){
 return that.name;
}
}
var name = "outer";
test.output();

JavaScript権威ガイドのコードを参照します.