2014년 1월 7일 화요일

[javascript] curry

안녕하세요 belhyun입니다.
curry 메소드는 함수와 인자를 결합해 새로운 함수를 만듭니다.

  var combine = { 
    'curry': function(fn){
      var args = nativeSlice.call(arguments, 1); 
      return function(){
        return fn.apply(this, args.concat(nativeSlice.call(arguments)));
      };  
    }   
  }; 

다음의 사용예를 들어보겠습니다.

combine.curry(function(){},[1,2])([3,4]);

위의 코드는 curry를 사용한 것인데 최종적으로 function(){}에 파라미터로 [1,2,3,4]가 전달됩니다. 즉 전달된 함수에 인자를 결합해 새로운 함수를 만들어 냅니다.
코드를 보게되면 nativeSlice는 Array.prototype.slice입니다. 전달된 [1,2]를 slice 하게 되면 [1,2]가 args에 할당됩니다. 그리고 클로져 함수에서는 [3,4]를 arguments로 받아 slice 후, args와 concat합니다. 즉 [1,2,3,4]가 function(){}에 전달됩니다. 즉 전달된 파라미터 함수에 인자를 결합하여 새로운 함수를 반환되게 합니다.

감사합니다.

댓글 없음:

댓글 쓰기