고차 함수는 함수를 인자로 전달받거나 함수를 결과로 반환하는 함수를 말한다.
고차함수는 인자로 받은 함수를 필요한 시점에 호출하거나 클로저를 생성하여 반환한다.
자바스크립트의 함수는 일급 객체이므로 값처럼 인자로 전달할 수 있으며 반환할 수도 있다.

// 고차 함수
function makeCounter(func) {
  var count = 0;
  return function () {
      count = func(count);
    return count;
  }
}

var predicate = {
  inc: n => ++n,
  dec: n => --n
}

var incCounter = makeCounter(predicate.inc);
console.log(incCounter());
console.log(incCounter());
console.log(incCounter());

var decCounter = makeCounter(predicate.dec);
console.log(decCounter());
console.log(decCounter());
console.log(decCounter());

참고:Higher Order Function