javaScriptの使用(4)は包装を閉じます.
1356 ワード
宣言した関数内の局所変数は外部からアクセスできません.同時に関数内に関数を入れ子できます.
外層関数の変数にアクセスできます.ある関数が内層関数の参照を返すと、間接的に外層で局所変数を使用できます.
たとえば:
方法の外でiをインクリメントするならどうすればいいですか?
このように定義できます
毎回呼出するたびに、iをアキュムレータして、外部で変数iが操作されていると説明し、iは常にメモリに保存されます.
これもクローズドの定番機能です.
クローズドを作成するたびに、新しいスコープと新しいプライベート変数が作成されます.互いに干渉しません.
以下では、総合的な例を分析します.もし我々が計算機の関数を作成し、各関数の
呼び出しはすべて使用者の結果に影響します.
閉包の総合例
ステップをテストします.
t 1,t 2
それぞれの操作は、それぞれのプライベート変数に影響を与えません.(連想してもいいです.
java
の
get
和
セット
方法)
外層関数の変数にアクセスできます.ある関数が内層関数の参照を返すと、間接的に外層で局所変数を使用できます.
たとえば:
function closure(){
vari=5;
i++;
alert(i);
}
// closure i 。 6
closure();
closure();
}
クローズドは、関数の体内宣言の関数として簡単に理解できる.方法の外でiをインクリメントするならどうすればいいですか?
このように定義できます
function closure(){
vari=5;
function iIncrement(){
i++;
alert(i);
}
return iIncrement;
}
var v=closure();
v();// 6
v();// 7
クロージング関数でiIncrement関数を定義し、この関数のオブジェクトを返します.毎回呼出するたびに、iをアキュムレータして、外部で変数iが操作されていると説明し、iは常にメモリに保存されます.
これもクローズドの定番機能です.
クローズドを作成するたびに、新しいスコープと新しいプライベート変数が作成されます.互いに干渉しません.
以下では、総合的な例を分析します.もし我々が計算機の関数を作成し、各関数の
呼び出しはすべて使用者の結果に影響します.
閉包の総合例
function counter(){
var n=0;
return {
count:function(){n++},
reset:function(){n=0},
get:function(){alert(n)}
}
}
counterの関数を作成しました.中には3つのクローズド関数が作成されています.それぞれnという変数を参照しました.ステップをテストします.
var t1=counter();
var t2=counter();
t1.count();
t1.get();// 1
t2.count();
t2.get();//1
t2.count();
t2.get();//2
t1.reset();
t1.get();//0
t2.get();//2
私たちが別々に作ったのが分かります.t 1,t 2
それぞれの操作は、それぞれのプライベート変数に影響を与えません.(連想してもいいです.
java
の
get
和
セット
方法)