# 커링(Curry)

함수는 값(value)이며 이 함수값을 새로운 방법으로 다룰 수 있습니다. 커링은 함수와 인수를 결합하여 새로운 함수를 만들 수 있게 합니다.

let add1 = add.curry(3);
console.log(add1(2));

add1addcurry 메소드에 1을 넘겨서 생성한 함수입니다. add1 함수는 자신의 인수에 1을 더합니다. 자바스크립트는 curry 메소드가 없지만 다음과 같이 Function.prototype에 추가가 가능합니다.

Function.prototype.curry = function () {
  let slice = Array.prototype.slice;
  let args = slice.apply(arguments);
  let that = this;
  return function () {
    return that.apply(null, args.concat(slice.apply(arguments)));
  };
};

function add(a, b) {
  return a + b;
}

let add1 = add.curry(1);
console.log(add1(5)); // 6