Closure



クローズドテレビ

  • エンクロージャ周囲状態(語彙環境)の参照とともに束関数に結合
    -MDN
  • ->はい.何を言っているのかわからない

  • まず、モジュールはJavaScriptの固有概念ではありません
  • 関数を1級オブジェクトとする関数式プログラミング言語で使用される重要な特性の一つは
  • である.
  • エンクロージャを理解するには、電子顕微鏡を理解することが望ましい.
  • LexicalScoFran
    :JavaScriptエンジンは、親スキャン
  • に応じて、どこから呼び出されたかではなく、どこで関数が定義されています.
    例1
    const x = 1;
    function foo() {
      const x = 10;
      function boo() {
        console.log(x); // 10
      }
      boo();
    }
    foo();
    例2
    const x = 1;
    function foo() {
      const x= 10;
      bar();
    }
    function bar() {
      console.log(x);
    }
    foo(); //
    bar();//

    エンクロージャの簡単な例

  • 関数の実行コンテキスト
  • 関数呼び出し時に関数の実行コンテキストを生成し、実行終了時に実行コンテキスト
  • を終了する.
    function outer(){
      const name = 'KOP';
      console.log(name)
    }
    
    console.log(name) //error
  • 上の例では当然エラーが発生します
  • 変数nameはouter関数の実行コンテキストが終了すると、誰もアクセスできません.
  • 関数の外で
  • nameを使用するにはcloserを使用します.
  • function outer(){
      const name = 'KOP';
      console.log(name)
      return function inner(){
        const greeting = 'hello!'
        console.log(greeting,name)
      }
    }
    const getKOP = outer()
    getKOP() //KOP
  • outer関数は次のように終了します.
  • の場合、outer関数の終了時に変数xは使用できませんが、
  • を返す関数の内部関数から
  • にアクセスできる.
  • 、すなわち、モジュールが外部変数を記憶し、これらの外部変数にアクセスできる関数は
  • である.

    なぜロッカーを使うのですか?

  • ステータスの安全な変更とメンテナンス
  • すなわち、
  • を使用して状態を安全に非表示にし、予期せぬ変更状態を回避し、特定の関数のみが状態を変更できるようにします.
    例:
    // 전역 변수
    let num = 0
    
    const increase = function () {
    	return ++num;
    }
    console.log(increase()); // 1
    console.log(increase()); // 2
    console.log(increase()); // 3
  • numをインクリメンタル関数
  • に変換したいだけです
  • ですがnumというグローバル変数
  • を誤って直接変更する可能性があります.
  • numが予期せぬ値を変更した場合、
  • のエラーが発生する可能性があります.
  • 以下は、エンクロージャを使用する例
  • である.
    const increase = (function () {
      let num = 0;
      // 클로저
      return function () {
        return ++num;
      };
    }());
    console.log(increase());// 1
    console.log(increase());// 2
    console.log(increase());// 3
    上記のコード
  • が実行すると、即時実行関数が呼び出され、即時実行関数が返す関数はインクリメンタル変数
  • に割り当てられる.
  • インクリメンタル変数に割り当てられた関数は、定義された位置で決定された親スキャンプログラムが関数を即時に実行するディレクトリ環境であるメモリ
  • である.