//클로저 함수의 기본 형태
const adder = x => y => x + y;
//위 문장은 다음과 같은 의미임
const adder = function (x) {
return function (y) {
return x + y;
}
}
const adder = function (x) { //외부함수와 외부함수의 변수인 x
return function (y) { //내부함수와 내부함수의 변수인 y
return x + y;
}
}
예제1.
const adder = function (x) {
return function (y) {
return x + y;
}
}
const add6 = adder(6); // x는 6
add6(6); // 6+6의 결과인 12
add6(8); // 6+8의 결과인 14
예제2.
//HTML 문자열 생성기
const tagMaker = tag => content => `<${tag}>${content}</${tag}>`
const divMaker = tagMaker('div');
divMaker('Jorge'); //'<div>Jorge</div>'
divMaker('Good morning'); //'<div>Good morning</div>'
const anchorMaker = tagMaker('a');
anchorMaker('go'); //'<a>go</a>'
anchorMaker('school'); //'<a>school</a>'
함수 하나가 n개의 인자를 받는 대신 n개의 함수를 만들어 각각 인자를 받게 하는 방법
변수를 외부 함수 스코프 안쪽에 감추어서 변수가 함수 밖에서 노출되는 것을 막는 방법
const makeCounter = () => {
let value = 0;
return {
increase: () => {
value = value + 1;
},
decrease: () => {
value = value - 1;
},
getValue: () => value
}
}
const counter1 = makeCounter();
counter1; // counter1은 객채이며, {increase: ƒ, decrease: ƒ, getvalue: ƒ}가 return
const counter2 = makeCounter();
counter2.increase();
counter2.decrease();
counter2.decrease();
counter2.increase();
counter2.increase();
counter2.getValue(); //1
const counter3= makeCounter();
counter3.decrease();
counter3.decrease();
counter3.decrease();
counter3.getValue(); //-3