* 고차함수
    - 함수를 인자로 받거나, 함수를 리턴하는 함수

        map, filter 등


* 일급함수
    - 언제나(런타임에서도) 선언 가능
    - 익명 선언 가능
    - 함수의 인자로 사용 가능


* 클로저
    - 내부함수이고 리턴되어 메모리가 해제되지 않음
    - 자신의 외부 변수를 사용하지 않으면 해제됨
    - 실행환경을 기억(메모리가 해제되지 않음)
    - 기억하고 있는 환경은 변경될 수 있음

//-----------------------
* 커링함수(currying)
    - 함수의 인자 수보다 적은 수의 인자를 받으면 누락된 인자를 받는 기법
    - 고차함수의 보조함수(콜백함수)로 활용

//일반 함수
var sum = function (x, y, z) { return x+y+z;}


//커링 함수
var sum2 = function(x) {
  return function(y) {
    return function(z) {
        return x+y+z;
    };
  };
};
ret = sum(1,2,3);
ret = sum2(1)(2)(3);


일반함수를 커링함수로 만들기
var sum3 = _.curry(sum); //lodash 이용


//---------------------
    - function 의 프로토타입 메서드 bind()를 이용해 커링 효과를 낼수 있다.
function add(a, b) {
  return a + b;
}
var add10 = add.bind(null, 10);
ret = add10(20);// 30


//--------------
// 부분 적용 (Partial Application)
    - 인자를 미리 부분적으로 적용
    - bind는 앞부터 순차적으로 적용해야 하는 제한
    - 함수의 중간 인자를 미리 부분적용 하는 경우
function abc(a, b, c) {
  console.log(a, b, c);
}

var ac = _.partial(abc, _, 'z'); //lodash 이용
ret = ac('a', 'c'); // a z c


반응형
Posted by codens