美文网首页
js函数柯里化

js函数柯里化

作者: jeff1804 | 来源:发表于2018-07-06 16:19 被阅读0次

什么是函数柯里化?

在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。
在直觉上,柯里化声称“如果你固定某些参数,你将得到接受余下参数的一个函数”。所以对于有两个变量的函数y,x,如果固定了 y = 2,则得到有一个变量的函数 2,x。
举个例子:

function multi(a,b){

    return a * b;

}

这是一个求两个数字的乘积的简单函数,每次调用时需要传入两个参数,但是如果我要求5的倍数,每次要重复输入

multi(5,1);
multi(5,2);
...

发现,这个5,是否可以不用每次输入呢?改造一下这个函数

function multiNum(a){
    return function(b){
        return a * b;
    };
}
var multiFive = multiNum(5);
multiFive(3);  //返回15

通过对multi函数的包装,只要调用multiFive,传入一个参数就可以实现5的乘积。
这里的multiFive函数就是柯里化multi后的函数。

通用表达式:

function currying(fn){

    var arg = [].slice.call(arguments,1);

    return function(){

        var newArg = [].slice.call(arguments);

        var finalArg = arg.concat(newArg);

        return fn.apply(null,finalArg);

    }

}

这里的currying函数就是柯里化的通用表达式。柯里化一下之前的multi函数:

var curryMulti = currying(multi,5);
curryMulti(3); //返回15

柯里化作用
1.提高适用性,参数复用
上面的curryMulti例子可以看出,柯里化multi之后,只需要传入一个参数就可以实现5的倍数。
2.延迟计算

下面是一个求和的函数:

var add = function(){

    var sum = 0;

    for(var i = 0,len= arguments.length; i< len ;i++){

      sum += arguments[i]

    }

    return sum;

}

下面是一个延迟执行的柯里化函数:

var curryDelay = function(fn){ 
    var args=Array.prototype.slice.call(arguments,1); 
    var ary=args; 
    return function(){
        if(arguments.length==0){
           return fn.apply(null,ary); 
        }else{    
          ary=ary.concat(Array.prototype.slice.call(arguments));
          return arguments.callee;
        } 
      } 
}

对add函数进行柯里化:

curryDelay(add,3,4,5,6)(); //返回18

通过柯里化函数后,curryDelay只在参数为空时才会执行,返回运行结果。

相关文章

  • [译]JavaScript中的函数柯里化

    原文 Currying in JS 函数柯里化 函数柯里化以Haskell Brooks Curry命名,柯里化是...

  • js柯里化

    标签: js柯里化 js柯里化 柯里化是什么在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成...

  • JS函数式编程之柯里化

    JS函数式编程之柯里化 为什么要了解柯里化 柯里化是函数式编程必须要使用的. 这里我们就先介绍下什么是柯里化, 然...

  • JS_函数柯里化

    JS_函数柯里化 与函数绑定密切相关的主体是函数柯里化(function currying),它用于创建已经设置好...

  • JS柯里化

    柯里化简介 js柯里化(currying)又译为卡瑞化或加里化,是把接受多个参数的函数,变为可接受多次调用的函数,...

  • JS函数柯里化

    函数柯里化:提高函数的适用性,同时降低函数的通用性;其实现方式就是固定一些可以预期的参数,然后返回一个特定的函数 ...

  • js函数柯里化

    什么是函数柯里化? 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函...

  • JS函数柯里化

    什么是柯里化? 维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函...

  • JS函数柯里化

    首先看看柯里化到底是什么? 维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受...

  • Js函数柯里化

    柯里化函数用来干嘛? 用来固定某个函数的一些参数,得到该函数剩余参数的一个新函数,如果没有剩余参数,则调用自己。 ...

网友评论

      本文标题:js函数柯里化

      本文链接:https://www.haomeiwen.com/subject/ajlbuftx.html