クローズドとは何ですか?

1420 ワード

クローズド(Cloure)
ローカル変数が解放されないコードブロックを保持することができます.
クローズドの概念は抽象的で、みんなが多かれ少なかれこの特性を知っていると信じています.
じゃ、閉パックはいったい私たちにどんなメリットをもたらすのですか?
まず、どうやってクローズドを作成するかを見てみます.
 

//       
function makeCounter() {
  let k = 0;

  return function() {
    return ++k;
  };
}

const counter = makeCounter();

console.log(counter());  // 1
console.log(counter());  // 2
makeCounterのこの関数のコードブロックは、返却された関数において、局所変数kを参照した結果、局所変数が関数実行終了後にシステムによって回収されなくなり、閉ループが発生した.このクローズド・パケットの役割は、「局所変数を保持し、内部関数を呼び出した時に、この変数を繰り返し使用することができます.大域変数とは異なり、この変数は関数内部でのみ参照されます.
言い換えれば、クローズドとは、いくつかの関数がプライベートである「持続変数」を作成することである.
したがって、この例から、私たちはまとめられます.
  • 内、外の二層関数
  • が存在します.
  • 内層関数の外層関数の局所変数を参照した
  • .
    クローズドの用途
    クローズドの主な用途は、キャッシュや計算の中間量などに使用することができる、いくつかのスコープの恒久化変数を定義することです.
     
    
    //        
    //            
    const cache = (function() {
      const store = {};
      
      return {
        get(key) {
          return store[key];
        },
        set(key, val) {
          store[key] = val;
        }
      }
    }());
    
    cache.set('a', 1);
    cache.get('a');  // 1
    
    上記の例は簡単なキャッシュツールの実装であり、匿名関数は、storeオブジェクトが参照されてもよく、回収されないように、クローズドパケットを作成している.
    閉鎖の弊害
    恒久化変数は正常には解放されず、メモリ空間を占有し続け、メモリの無駄をもたらしやすいので、通常はいくつかの追加的な手動のクリーンアップメカニズムが必要です.
     
    選択:http://taobaofed.org/blog/2017/03/16/javascript-functional-programing/