函数柯里化

函数柯里化

函数柯里化 是将多个参数的函数转换为一系列接受单个参数的函数的过程,举例来说,就是能把 add(a,b,d) 转变为 add(a)(b)(d),这个过程利用了闭包,即内部函数能够使用外部函数的变量

原函数

function add(a,b,c){
    return a+b+c;
}
// 调用时
console.log(add(1,2,3)) // 6

柯里化后

function Curried1(a){
    return function(b){
        return function(c){
            return a+b+c;
        }
    }
}
// 调用
console.log(Curried1(1)(2)(3)) // 6

也可简写为箭头函数

const Curried2=(a)=>(b)=>(c)=>a+b+c;
// 调用
console.log(Curried2(1)(2)(3)) // 6

优点

  1. 单一职责原则

柯里化后每个函数都有各自的职责,方便后续维护和修改工作

// 普通函数:
// 这只是简单的运算,如果a、b、c的值有十分复杂的变化,会难以修改
function sum(a,b,c){
    a=a*2;
    b=b/3;
    c=c*c;
    return a+b+c;
}

// 柯里化后:
// 柯里化后每个函数都有单一职责,不易混乱
function sum(a){
    a=a*2;
    return function(b){
        b=b/2;
        return function(c){
            c=c*c;
        }
    }
}

  1. 逻辑复用

在某些运算中,可能只需要修改传入参数中的其中一个,其他不变,这种情况下,为了实现更好的复用,可以写为柯里化函数

// 普通函数:
function sum1(a,b){
    return a+b;
}
// 计算 1+3、1+5、1+9
console.log(sum1(1,3)) // 4
console.log(sum1(1,5)) // 6
console.log(sum1(1,9)) // 10

// 柯里化后:
function sum2(a){
    return function(b){
        return a+b;
    }
}
// 可以用一个变量存储 sum2(1),然后再传入其他参数,结果一致
let aa=sum2(1)
console.log(aa(3)) // 4
console.log(aa(5)) // 6
console.log(aa(9)) // 10

最后

柯里化函数可用于延迟执行,如同上述代码,调用后存储到一个变量,需要时再调用传参

核心在于:函数里面返回函数,能方便维护代码,减少冗余

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值