1. 클로저


외부 함수의 컨텍스트(변수)에 접근할 수 있는 내부함수

함수와 함수가 선언된 어휘적(lexical) 환경의 조합

이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다

클로저 함수는 함수를 리턴하는 함수

const adder = x => y => x + y

const adder = function (x) {
  return function (y) {
    return x + y;
  }
}

외부함수 변수 x, 내부함수 변수 y

외부 함수는 y에 접근이 가능한가? No 바깥 스코프에서는 안쪽 스코프로의 접근이 불가능

내부 함수는 x에 접근이 가능한가? Yes 안쪽 스코프는 바깥 스코프에서 선언된 변수에 접근이 가능

클로저는 리턴하는 함수에 의해 스코프(변수의 접근 범위)가 구분

클로저의 핵심은 스코프를 이용해서, 변수의 접근 범위를 닫는(closure; 폐쇄) 데에 있음

따라서, 함수를 리턴하는 것만큼이나, 변수가 선언된 곳이 중요

const adder = function(x){
  return function(y){
    return x+y
  }
}

const add5 = adder(5);
add5(7); 12
add5(10); 15

2. 클로저 모듈 패턴을 활용한 모듈화


// 클로저 모듈 패턴

const makeCounter = () => { 
  let value = 0;
  return {
    increase : () => {
      value = value + 1;
    },
    decrease : () => {
    value = value - 1;
    },
    getValue : () => value
  }
}

const counter1 = makeCounter();