Closer関数


関数のコールバック関数として,内部関数と外部関数を区別する場合,内部関数をCloser関数と呼ぶ.
エンクロージャは、Scopeを使用してアクセス範囲を閉じ、カプセル化することを核心とする戻り関数によってScopeを区別します.

メソッドの宣言


矢印関数

const add = a => b =>{
     return a+b; 
}

一般関数

const add = function(a){
  //외부 함수
    return function(b){
        return a+b;
    }
  //내부 함수
}
この2つの関数は同じ役割を果たすモジュール関数です.外部関数は内部関数の変数bにアクセスできないが、内部関数は外部関数の変数aにアクセスできる.

なぜCloser関数を使うのか


一般的な関数は、関数の実行が終了すると使用できなくなりますが、外部関数の実行が終了すると、モジュールは外部関数の変数をメモリに格納するので、繰り返し使用できます.
const add = function(a){
    return function(b){
        return a+b;
    }
}

const sum = add(3);
console.log(sum(4));
// 7
console.log(sum(7));
// 10
これらの機能を使用すると、次のことができます.

エンクロージャの使用


モジュールを使用して作成した関数.

HTMLタグの作成

const createTag = tag => content => `<${tag}>${content}</${tag}>`;

const createDiv = createTag('div');
createDiv('Closure');

// <div>Closure</div>

モジュールモード


パッケージを実装する際に使用する方法の1つ.
const calc = () => {
  // private 영역, 함수 밖에선 total에 접근할 수 없다.
  let total = 0;
  return {
    // public 영역
    add: (a, b) => {
      total += a + b;
    },
    sub: (a, b) => {
      total += a - b;
    },
    getTotal: () => {
      return total;
    },
  };
};

const Calc = calc();

Calc.add(5, 6);
console.log(Calc.getTotal()); // 11
Calc.sub(1, 3);
console.log(Calc.getTotal()); // 9
closer関数ではなくtotalという変数に値を格納しようとします.
totalという名前の変数は、グローバル変数として宣言する必要があります.
calc関数は、totalの値が保持されているため、グローバル変数として宣言する必要はありません.
モジュールを使用すると、不要なグローバル変数の使用を減らすことができます.
スキャン機能を使用して価値を保護します.