JSのクローズド

1170 ワード

概要
クローズドは関数と宣言された関数の環境の組み合わせです.MDN
語法のスコープ:現在の関数のスコープを作成します.
作用
  • パッケージデータ
  • 一時データ
  • ケース
    function car(){
      var speed = 0
      function fn(){
        speed++
        console.log(speed)
      }
      return fn
    }
    var speedUp = car()
    speedUp() //1
    speedUp() //2
    
  • 一般的に、一つの関数が実行された後、JavaScriptのゴミ収集器はこの関数の内部変数によって占有されたメモリ空間
  • を解放します.
  • 私たちはこの関数の語法作用の範囲外で変数を定義して、この変数をこの関数の内部の関数の参照を保存することができます.var speedUp = car()です.speedUpを介してcar()内部のfn()
  • を実行できます.
  • は、car()の関数の品詞作用領域を離れても、外部のspeedUpによってcar内部の関数を呼び出すことができます.私たちはまだcar()内部関数を呼び出す可能性があるので、JavaScriptは参照された関数を保持する必要があります.また内部変数は解放されません.つまりJavaScriptのゴミ収集器はこの関数に対応するメモリを回収しません.
  • は、関数内部で外部変数に値を付与する匿名関数であり、この匿名関数は、外層関数の変数を使用する必要がある場合、この外部関数も回収されない
  • .
    A closure is the local variables for a function-kept alive after the function has returned.-javascriptkit
    javascriptkitでは、クローズドについて上記のように説明していますが、一つのクローズドとは、関数内部の変数が戻ってもアクティブな状態を維持するという意味です.すなわち、関数内部の関数が外部に露出し、解放されない.
    //      :
    function simpleExample() {
      var i
      return function(){
        i++
      }
    }