길/Javascript 기본

고차 함수(Higher Order Function) / 커링과 클로져 차이

7he8oy 2021. 2. 1. 13:03
함수를 인자로 받거나 함수를 리턴하는 함수

이때, 다른 함수의 인자로 전달되는 함수를 특별히 콜백 함수라고 한다.
반면, 함수를 리턴하는 함수를 커리 함수라고 한다.

 

 

위 정의에 따르면, 고차 함수의 형태는 세 가지가 있다.

 

 

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