函数柯里化介绍及使用

一.什么是函数的柯里化

所谓函数的柯里化就是把具有较多参数的函数转换成具有较少参数的函数的过程。简单来说,柯里化就是帮助我们处理某一个函数(含较多参数)

二.实例引出

直接上传一段代码如下:

//以前的方法
function add(a, b, c, d) {
            return a + b + c + d
        }
        console.log(add(1,2,3,4))   //10

//ES6的原始方法
function add(a = 1, b = 2, c, d) {
            return a + b + c + d
        }
        console.log(add(undefined,undefined,3,4))   //10
//只有在未传递参数或者参数为undefined时,才会使用默认参数

根据定义,我们需要实现函数传递一个又一个参数,在不影响最终结果的情况下实现这种效果,如下:

console.log(add(1,2)(3)(4))  = 10
console.log(add(1)(2)(3)(4))  = 10
console.log(add(1,2)(3,4)) = 10
//console.log(add(1,2)(3,4))   //报错add()()is not defind
//但实际上会报错

于是,我们需要借助一种方法来达到上述目的。因此引入了函数的柯里化。

三.柯里化使用

解释:

 function Curry(fn) {  //柯里化功能函数
            // 此处省略若干行代码
        }
 var newAdd = Curry(add)  //返回一个新函数,newAdd就是经过柯里化处理的函数

注意:如果函数参数传递完成,会直接执行,没有传递完成,会继续返回一个函数并期待下一次调用函数的时候能够把参数传递完成

代码展示如下:

 //使用
   function add(a,b,c,d) {
            return a + b + c + d
        }
        //console.log(add.length)    //4
        function curry(fn,args) {
            var length = fn.length   //声明函数传参数量
            args = args || []      //
            //柯里化过程
            return function(...rest) {     //调用函数,并传递参数
                var _args = [...args,...rest]     //新的数组,arg:初始情况下(不传参)为[]
                return _args.length < length ?    //判断参数是否传递完,如果没有传递完,继续返回上面传递参数的函数,否则执行柯里化后的函数
                curry.call(this,fn,_args) : 
                fn.apply(this,_args)
            }
        }
        var newAdd = curry(add)
        console.log(newAdd(1,2,3,4))           //10
        console.log(newAdd(1,2)(3)(4))         //10
        console.log(newAdd(1)(2)(3)(4))       //10
        console.log(newAdd(1,2)(3,4))         //10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值