함수를 인자로 받거나 함수를 리턴하는 함수
이때, 다른 함수의 인자로 전달되는 함수를 특별히 콜백 함수라고 한다.
반면, 함수를 리턴하는 함수를 커리 함수라고 한다.
위 정의에 따르면, 고차 함수의 형태는 세 가지가 있다.
1. 다른 함수를 인자로 받는 경우 (double은 new_func의 콜백 함수)
function double(num) {
return num * 2;
}
function new_func(func, num) { // <-- 다른 함수를 인자로 받는 고차 함수다.
return func(num);
}
let output = new_func(double, 4); // <-- new_func는 caller/ double은 call-back
console.log(output); // -> 8
2. 함수를 리턴하는 경우
// adder는 다른 함수를 리턴하는 고차 함수/커링 함수
//
function adder(added) {
return function(num) {
return num + added;
};
}
let output = adder(5)(3); // -> 8
console.log(output); // -> 8
//함수는 일급 객체, 따라서 함수를 변수에 지정 가능.
const add3 = adder(3);
output = add3(2);
console.log(output); // -> 5
3. 함수를 인자로 받고, 함수를 리턴
function double(num) {
return num * 2;
}
function doubleAdder(added, func) {
const doubled = func(added);
return function (num) {
return num + doubled;
};
}
doubleAdder(5, double)(3); // -> 13
const addTwice3 = doubleAdder(3, double);
addTwice3(2); // --> 8
커링과 클로져의 차이
클로져의 정확한 정의를 다시 이야기해 보자면
function inside a function이 closure인 것이 아니라, function's scope 외부 변수에 접근하는 것을 클로져라고 한다.
커링의 정의는
n개의 arguments를 받아야 하는 function을 n개의 function으로 나눈 것을 의미한다.
따라서 커링은 클로져의 특성을 '활용'한 것이다.
'길 > Javascript 기본' 카테고리의 다른 글
Array.reduce() (0) | 2021.02.01 |
---|---|
고차 함수 상세 (0) | 2021.02.01 |
일급 객체(first-class) (0) | 2021.02.01 |
arguments object과 array like object (0) | 2021.01.28 |
Object.assign과 Shallow/Deep copy (0) | 2021.01.28 |