Closure閉パッケージ
1006 ワード
「閉パッケージ」とは、多くの変数とバインドされた環境を持つ式(通常は関数)を指し、これらの変数も式の一部です.(PS:拗ねてわかりにくい定義)
以下、閉包の意味をコードで例示する
注意:
閉パケットの存在により関数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が加算される.
以下、閉包の意味をコードで例示する
/**
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が加算される.