Javascript实现函数的curry化

本文介绍了Curry化技术的基本概念及其实现方式,并通过JavaScript语言展示了如何将一个多参数函数转换为一系列单参数函数,以便更好地处理参数部分应用的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先介绍下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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值