클로저란 외부 함수의 변수에 접근할 수 있는 내부 함수
클로저 함수 안에서는 지역 변수, 외부함수의 변수, 전역 변수에 접근이 전부 가능함
예제
커링: 함수 하나가 n개의 인자를 받는 대신 n개의 함수를 만들어 각각 인자를 받게 하는 방법
function adder(x) { // x = 2
return function(y) { // y = 3
return x + y // 2 + 3 = 5
}
}
adder(2)(3) // 5
let add100 = adder(100) x의 값을 고정해놓고 재사용이 가능함, 함수를 생성하는 함수
add100(2) // 102
add100(10) // 110
let add5 = adder(5)
add5(2) // 7
클로저 모듈 패턴 : 변수를 스코프 안쪽에 가두어 함수 밖으로 노출 시키기 않는 방법
function makeCounter() {
let privateCounter = 0;
return {
increment: function() {
privateCounter++;
},
decrement: function() {
privateCounter--;
},
getValue: function() {
return privateCounter;
}
}
}
let counter1 = makeCounter();
counter1.increment();
counter1.increment();
counter1.getValue(); // 2
let counter2 = makeCounter();
counter2.increment();
counter2.decrement();
counter2.increment();
counter2.getValue(); // 1