const add = a => b => a+b; 와 같이 화살표 함수를 2번 호출할 수 있음
add(1)(2) //3 과 같이 호출
add(1) // b => a+b 함수를 리턴
즉 add function (a) {
return function(b) {
return a+b;
}
} 와 같은 구조이므로, 내부 함수를 그대로 리턴한 것
클로저 함수는 함수를 리턴하는 형태이다
const add3 = add(3); >> 변수 add3은 a에 3이 할당된 채로 보존
add3(5) // 8 과같이 보존된 변수를 다시 사용할 수 있음
클로저 모듈 패턴
함수 = () => {
let 변수 = 0;
return {
함수1: () => {변수+1},
함수2: () => {변수-1},
함수3: () => {변수},
} 함수를 여러개 포함한 객체
}
const 함수를 담은 변수 = 함수() // {함수1,함수2,함수3}
정보의 접근 제한이 가능하다(변수에 값을 새롭게 할당할 수 없음, 캡슐화)
함수를 담은 변수.함수1
함수를 담은 변수.함수2
와 같이 접근이 가능하며,
const 함수를 담은 변수1 = 함수();
const 함수를 담은 변수2 = 함수();
와 같이 하나의 함수를 재활용하여 여러개의 변수를 만들수 있다.
즉 함수를 담은 변수1, 변수2 내부의 변수는 서로 다른 값을 가질 수 있다.
클로저는 모듈화에 유리하다
클로저는 내부 스코프 안에 외부 변수를 가둔다(Close)!