코 리 화 함수 의 자 바스 크 립 트

코 리 화 함수 의 자 바스 크 립 트
정의.
정의 에 따 르 면 코 리 화 는 '여러 개의' 인 자 를 받 는 함 수 를 하나 또는 여러 개의 '단일' 인 자 를 받 는 함수 로 나 누 는 것 이다.정 의 는 비교적 추상 적 으로 보인다. 다음은 예 를 들 어 보 자.
코드

      
      
      
      
1
2
3
4
5

      
      
      
      
function concat(str1,str2){
return str1 + str2;
}
concat( "forever", "px") // "foreverpx"

不难理解,上面的代码中定义了一个连接字符串的函数,返回连接两个传入参数的字符串。现在我们再看看另一种定义方式:


      
      
      
      
1
2
3
4
5
6
7
8

      
      
      
      
function concatCurry(str1){
return function(str2){
return str1 + str2;
}
}
var concatOne = concatCurry( "forever");
concatOne( "px"); //foreverpx

上面的代码中,我们将一开始传入两个参数的函数改装成了一个(或者说是两个)只接收一个参数的函数。

我们来创建一个将接受多个参数的函数柯里化的通用函数:


      
      
      
      
1
2
3
4
5
6
7
8
9

      
      
      
      
function curry(fn) {
var args = [].slice.call( arguments, 1);
return function() {
return fn.apply( null, args.concat([].slice.call( arguments, 0)));
}
}
var concatOne = curry(concat, "forever");
concatOne( "px"); //foreverpx

柯里化的过程利用了闭包,使得返回的函数也能获得第一次传入的参数。
首先将传入的第二个参数存入args变量中,然后返回一个函数,在返回的函数中,将第一次传入的参数与柯里化之后传入的参数拼接起来成一个数组,然后通过apply方法调用柯里化之前的函数(fn),这样就达到了柯里化的效果。

如果是三个参数的函数想要柯里化,则如下:


      
      
      
      
1
2
3
4
5
6
7
8
function concat(s1,s2,s3){
return s1+s2+s3;
}
var cur1 = curry(concat, "forever");
var cur2 = curry(cur1, "px");
cur2( "-me"); //foreverpx-me

글 쓴 이: foreverpx 글 원문 링크: 코 리 화 함수 의 자바 script

좋은 웹페이지 즐겨찾기