javaScriptの使用(4)は包装を閉じます.


宣言した関数内の局所変数は外部からアクセスできません.同時に関数内に関数を入れ子できます.
外層関数の変数にアクセスできます.ある関数が内層関数の参照を返すと、間接的に外層で局所変数を使用できます.
たとえば:
  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

セット
方法)