函数柯里化

函数柯里化是一种将多参数函数转换为单参数函数的技术,简化了函数调用并允许逐步传递参数。文中通过具体示例展示了如何实现柯里化的简单和通用方法,例如创建一个加法函数,以及使用通用柯里化函数包装另一个函数。柯里化有助于函数式编程中的组合和优化。

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

什么是函数柯里化?

是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
它的重要意义在于可以把函数完全变成「接受一个参数;返回一个值」的固定形式,这样对于讨论和优化会更加方便。

简单的例子
function add(){
    let arr = Array.prototype.slice.call(arguments)
    function _add(){
        let _arr = Array.prototype.slice.call(arguments)
        arr = arr.concat(_arr)
        return _add
    }
    _add.toString = function(){
        let count = 0;
        for(let i = 0; i < arr.length; i++){
            count += arr[i]
        }
        return count
    }
    return _add

}
add(12)(1)(3,6).toString() //22
通用的例子
function currying(fn){
    let _curry = function(){
        let arr = Array.prototype.slice.call(arguments);
        return function(){
            let _arr = Array.prototype.slice.call(arguments);
            arr = arr.concat(_arr)
            if(arr.length < fn.length){
                return _curry.apply(null, arr)
            }else{
                return fn.apply(null, arr)
            }
        }
    }
    return _curry
}
function example(a,b,c){ 
    return a+b+c; 
  }
let curriedAdd = currying(example); 
console.log(curriedAdd(1)(2)(3)); // 6
console.log(curriedAdd(1)(2,3));//6


可以看出通用例子是在简单例子外部又包了一层用于接收函数fn,下面的_curry 相当于上面的add

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值