柯里化读这一篇就够了

柯里化

//普通的纯函数
//这里写一个用于判断用户是否成年的普通纯函数
function checkAge(min,age){
    return age >= min
}
console.log(checkAge(18,20))
console.log(checkAge(18,24))
console.log(checkAge(22,24))
//这里会发现 18作为一个基准值,经常被调用,那么怎么去减少这个值的调用呢

//这里我们可以使用 闭包 和高阶函数内记得技巧--将函数作为返回值
function checkAge(min){
    return function(age){
        return age >= min
    }
}
//es6
//let checkAge = min =>(age => age>= min)
const check18 = function checkAge(18)
const check20 = function checkAge(20)
console.log(check18(22))	//true
console.log(check20(24))	//true


//其实这个解决方案就是柯里化

由上可知柯里化就是,当一个函数接受多个参数时,可以先传递一部分给他(这部分参数以后永远不变),然后返回一个新的函数接受剩余的参数,返回结果

Lodash中的柯里化

  • curry(func)
    • 当传递的参数是内部需要的所有的参数,会直接执行并返回执行结果
    • 如果传递的参数是内部需要的部分参数,会返回内部函数并等待剩下的参数
const _ = require('lodash')
function getSum (a,b,c){
    return a+b+c
}

const curried = _.curry(getSum)
console.log(curried(1,2,3))//6
console.log(curried(1)(2,3))//6

柯里化原理

function curry(func){
    return function curriedFn(...args){
        if(args.length < func.length){
            return function(){//利用递归来传递合并参数
                return curriedFn(...args.concat(Array.from(arguments)))
            }
        }
        return func(...args)
    }
}

总结

  • 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数
  • 这是一种对函数参数的缓存
  • 让函数百年的更灵活,让函数的颗粒度更小
  • 可以把多元函数转换成一元函数,可以组合使用函数产生强大的功能
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值