Closure


返された内部関数によって外部関数のスキャンを保持する環境
返された内部関数のみが外部関数のスキャンにアクセス/変更する環境Closureは、辞書的意味、すなわち폐쇄を有する.
javascriptでは、外部から変数にアクセスする方法を閉じる方法も定義できるようです.
これらの特性は、オブジェクト向けプログラミングにおける情報隠蔽の概念を実現するために使用することができる.
モジュールを理解するためには、スキャン概念を理解する必要がある.
JavaScriptのスキャンを簡単に整理してみましょう.
スコットランド?
  • 変数は格納された論理空間であり、変数の有効範囲でもある.
  • は、基本的に関数単位でスキャンされる.(ES 6からブロックスキャンも利用可能です.)
  • オシロスコープは、関数が呼び出されると生成され、終了すると消失する.
  • プローブはオーバーラップすることができる.
  • 内視鏡は外視鏡で近づくことができ、その駅は不可能です.
  • 上の概念を利用して、閉鎖を創造します.
    function outerFn() {
      let number = 1;
      
      function innerFn() {
        // 내부함수에서 외부스코프의 변수를 사용하지않는다면 클로져가 아니다!
        return ++number;
      }
      
      return innerFn;
    }
    
    const increment = outerFn();
    
    console.log(increment()); // 2
    console.log(increment()); // 3
    console.log(number); // Uncaught ReferenceError: number is not defined
    数値変数が保護されています.
  • numberはインクリメンタル関数のみで変更できます.
  • outerFnの関数の実行は終了したが、innerFnスキャンはouterFnスキャン空間を維持した.(number変数はまだ存在します.)
  • 返された内部関数のみが特定の変数にアクセスできる環境を「閉じる」と呼びます.

    リファレンス


    https://velog.io/@proshy/JS%ED%81%B4%EB%A1%9C%EC%A0%B8closure%EC%99%80-%ED%81%B4%EB%A1%9C%EC%A0%B8%EC%9D%98-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%A0%9C