js函数柯里化

最近在学习js的路上,遇到函数柯里化相关的内容,这里记录下自己的理解:
首先,什么是柯里化?

函数的柯里化,就是把一个接收多个参数的函数,转化成可以接收单一参数的函数。

举个简单的栗子:

// 一个接收两个参数的函数,实现加法
function add(a, b){
    return a+b;
}

add(1,2);

// 转化成接收一个参数
function add(a){
    return function(b){
        return a + b;
    }
}
var add2 = add(1);
add2(2);

在函数中返回另一个函数,从而实现分步调用参数。(这里利用了闭包,参数a被保留了)

但是这种写法的问题,1.如果新增参数个数,那么返回的函数也得增加,不灵活  2.代码不够优雅

所以我们可以写一个函数,来解决上面的这两个问题,这种功能就是柯里化。

// 实现函数柯里化
// 柯里化函数curry,传入初始的函数,返回柯里化后的函数

/**
    @fn: 原始函数
    @arg: 传入的参数,可选
**/
var curry = function(fn, ...args){
    var length = fn.length; // 获取参数个数
    var args = args || [];
       return function(){
            var newArgs = args.concat(Array.prototype.slice.call(arguments));
            if(newArgs.length < length){
                return curry.call(this, fn, ...newArgs);
            }else{
                return fn.apply(this, newArgs);
            }
        }
}


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

var curryAdd = curry(add, 1);
curryAdd(2)(3);
curry(add)(1)(2)(3)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值