详解js中的函数柯里化

柯里化(Haskell Brooks Curry)

  • 解决硬编码的问题
  • 原理:当一个函数有多个参数的时候,先传递一部分参数调用它(这部分参数以后永远不变) 然后返回一个新的函数接收剩余的参数,返回结果
  • 作用:可以将任意多元函数,转化成一元函数

简单的柯里化理解

function curry(min) {
	return function(age) {
		return age <= min;
	}
}
let info = curry(18); // 提取并储存一个参数,方便后面函数调用时,不用反复传入相同参数
info(16) //true
info(20) // false


let curry = (min) => (age => age <= min);

curry(18)(16); // true 

柯里化案例

const match = _.curry(function (reg, str) {
  return str.match(reg)
})

const haveSpace = match(/\s+/g)
const haveNumber = match(/\d+/g)
const filter = _.curry(function (func, array) {
  return array.filter(func)
})
const findSpace = filter(haveSpace)

console.log(filter(haveSpace, ['John Connor', 'John_Donne']))
console.log(findSpace(['John Connor', 'John_Donne']))

模拟loadsh函数库中的curry函数【curry方法可将函数变为柯里化函数】

function getSum(a, b, c) {
    return a + b + c;
}
function curry(func){
    return function curriedFn(...args){
    //判断实参和形参的个数
    if(...args.length < func.length) {
        return function () {
        return curriedFn(...args.contact(Array.from(arguments))}
    }
    return func(...args)
  }
}
//补充:func.length可以获得函数形参的个数,也就是getSum的个数
let curried = curry(getSum)
console.log(curried(1, 2, 3))
console.log(curried(1)(2, 3))
console.log(curried(1, 2)(3))

函数柯里化总结

  • 柯里化可以让我们给一个函数传递较少的参数,得到一个已经记住了某些固定参数的新函数 • 通过闭包,对函数参数进行缓存
  • 让函数变得更灵活,让函数的粒度更小
  • 可以把多元函数转换成一元函数,可以组合使用函数产生强大的功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值