Skip to content
On this page

Higher Order Function

JS에서 함수는 일급객체라서 일반변수나 함수의 인자로 전달하거나 반환값으로 사용할 수 있습니다.

고차함수로 Array.prototype.reduce 메서드를 구현하면 다음과 같습니다.

js
const reduce = (reducer, initial, arr) => {
  // shared stuff
  let acc = initial;
  for (let i = 0, { length } = arr; i < length; i++) {
    // unique stuff in reducer() call
    acc = reducer(acc, arr[i]);
    // more shared stuff
  }
  return acc;
};

reduce((acc, curr) => acc + curr, 0, [1, 2, 3]); // 6

위에서 만든 reduce 함수로 Array.prototype.filter 메서드를 구현하면 다음과 같습니다.

js
const filter = (fn, arr) => {
  return reduce((acc, curr) => (fn(curr) ? acc.concat(curr) : acc), [], arr);
};

TIP

immutability를 위해서 push가 아닌 concat로 새로운 배열을 만드는 것을 확인할 수 있습니다.