Javascript实现函数的curry化

首先介绍下curry的概念:

使函数理解并处理部分应用的过程就叫做CURRY化:

例如,我想将add(x,y)方法转换成一个可以分成两部输入参数并正确计算结果的函数,我们就可以用到CURRY化的概念,javascript是一门动态性很强的语言,我们很容易实现这个效果:

代码如下:

function add(x,y){
    if(typeof y === 'undefined'){
        return function (y) {
            return x + y;
        }
    }

    return x + y;
}

这里将原始的x存储在闭包中,原始的y则作为局部变量复用。

这是结果:

add(3)
function (newy) {
return oldx + newy;
}
typeof add(3)
“function”
add(3)(4)
7

当我们的函数中传递的参数大多数都是相似的情况下,我们考虑使用CURRY化,现在我们可以写一个通用CURRY的函数:

function schonfinkelize(fn){
    var slice = Array.prototype.slice,
        stored_arg = slice.call(arguments,1);
    return function () {
        var new_arg = slice.call(arguments),
            args = stored_arg.concat(new_arg);
        return fn.apply(null,args);
    }
}

我们可以将add函数CURRY化:

function add(x,y){
return x + y;
}
var newAdd = schonfinkelize(add,1);
newAdd(2,3)
3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值