函数柯里化的原理及简单实现

什么是函数柯里化?

概念:函数柯里化就是把一个具有n个参数的函数转变成为可以进行二次甚至n次调用执行的函数,也就是说将函数的n个参数分1~n次传入,在n个参数传入完成后一次性执行这个函数。

原理:函数柯里化的原理就是将要柯里化的函数作为柯里化标准函数的返回值,将要保存的内容作为外部函数的变量。也就是利用闭包创建一个私有域,使内部变量可以长期保存在内存中,直到内部返回的函数执行完成。(也就是要被柯里化的函数的n个参数都传入完成,一次性完成了计算操作,那么闭包中保存的变量就被释放)

以一个简单的例子来说:比如我们要计算一个人他三天的总花费,他会每天记录一下自己当天的花费,然后在第三天得出自己这三天来的总花费。那么这三天的每一天他都会调用一次这个函数,最后在第三天一次性计算出总花费。

简单的函数柯里化实现(可以多次调用版):

如上述例子中需要柯里化的函数如下:

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

实现柯里化的函数:

// 可以多次执行的函数柯里化
let curry=function(fun){
   let args=Array.prototype.slice.call(arguments,1);//取出除了函数外的其它参数保存在args中
   return function(){
       let newArgs=args.concat(Array.from(arguments));//后面每次调用都把参数拼接到args中保存
       if(newArgs.length<fun.length){//函数参数还没有完全传完
          return curry.call(this,fun,...newArgs);//重新进行柯里化,实现多次调用
       }else{//如果参数全部传完
          return fun.apply(this,newArgs);//返回全部参数一次性执行函数的结果
       }
   }
}

执行示例如下:

let f1=curry(add,1);
console.log(f1(1)(2));//多次调用,结果为4
console.log(f1(2,3));//二次调用,结果为6

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值