Closure閉パッケージ


「閉パッケージ」とは、多くの変数とバインドされた環境を持つ式(通常は関数)を指し、これらの変数も式の一部です.(PS:拗ねてわかりにくい定義)
以下、閉包の意味をコードで例示する
/**
	1、  b     a  ;
	2、  a    b。
	**/
	function a() {
		var i = 0;
		//  b     a 
		function b() {
			alert(++i);
		}
		return b;
	}
	//    var c=a() ,  c         b,
	//   c()           i  (    1)
	var c = a();
	c();

 
注意:
閉パケットの存在により関数aが返されると、a中のiは常に存在し、c()が実行されるたびに、iは1が加算されたalertからiが出る値となる.
閉パケットの役割は、aの内部関数bの実行がaの変数に依存する必要があるため、aが実行されて戻った後、Javascriptのゴミ回収メカニズムGCがaが占有するリソースを回収しないようにすることである.
 
 
注意:
関数a外の変数cは、関数a内の関数bを参照するからである.
すなわち、関数aの内部関数bが関数a外の変数によって参照されると、閉パケットが作成される.
クローズドパッケージ適用の場合:
上記の例について説明します.
 
 
 
閉包適用シーン:
 
1、関数内の変数の安全を保護する.最初の例では、関数a中のiは関数bのみがアクセスでき、他の方法でアクセスできないため、iのセキュリティが保護される.
2、メモリに変数を保持します.前例のように、閉パケットでは、関数a中のiがメモリに常に存在するため、c()を実行するたびにiに1が加算される.