여러 개의 인자를 가지는 함수를 단일 인자로 갖는 함수들의 계층구조로(순서로) 바꾸는 것 —> 클로저(Closure)에 대한 개념이해가 필수
함수가 필요로 하는 인자의 갯수만큼 충족되지 않았다면 계속 함수를 반환
→ 인자의 갯수를 모두 충족시켰다면 최종적인 값을 반환
function sum(x) {
return function (y) {
return x + y;
};
}
const add = sum(3);
console.log(add(4)); // 7
console.log(sum(5)(8)); // 13
const sum = (x) => {
return (y) => {
return (z) => {
return x + y + z;
};
};
};
console.log(sum(8)(2)(3)); // 13
// =>>
const sumArrowFunc = (x) => (y) => (z) => x + y + z;
console.log(sumArrowFunc(3)(5)(3)); // 11
feed() 함수는 인자를 2개 받는데 첫번째 인자로는 동물의 이름을 받고, 두번째 인자로는 먹이 종류를 받는다.
출력 —> 바둑에게 생선 먹이를 주고 있다.
const feed = (name) => {
return (feed) => {
return `${name}에게 ${feed}을(를) 주고 있다.`;
};
};
console.log(feed("진돌이")("생선"));
const feed2 = feed("북북이");
console.log(feed2("닭고기"));
console.log(feed2("소고기"));
console.log(feed2("돼지고기"));
// ------------------------------ //
const feedArrow = (name) => (feed) => {
return `${name}에게 ${feed}를 주고있다`;
};
const feedArrow2 = feedArrow("나옹이");
console.log(feedArrow2("고등어"));
console.log(feedArrow2("참치"));
/*
진돌이에게 생선을(를) 주고 있다.
북북이에게 닭고기을(를) 주고 있다.
북북이에게 소고기을(를) 주고 있다.
북북이에게 돼지고기을(를) 주고 있다.
나옹이에게 고등어를 주고있다
나옹이에게 참치를 주고있다
*/
—> 중복을 줄일 수 있다
const feed = (a) => (b) => (c) => (d) => {
return a + b + d + c;
};
const feed2 = feed("바둑")("에게 ")("를 줬다");
console.log(feed2("고등어"));
console.log(feed2("연어"));
// 바둑에게 고등어를 줬다
// 바둑에게 연어를 줬다
커링 함수의 가장 큰 장점 중 하나
—> 인자를 부분 적용한 함수를 쉽게 만들어 낼 수 있다
—> 인자의 수를 마음대로 조절, 매개변수를 나타내는 함수의 집합을 쉽게 만든다.