【JavaScript进阶】函数柯里化

柯里化是将多参数函数转换为一系列单参数函数的技术。文章通过示例解释了如何在JavaScript中实现柯里化,提供了一个简单的柯里化函数定义,并展示了如何使用该函数。此外,还提供了一段简洁的柯里化实现作为参考。
摘要由CSDN通过智能技术生成

在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。

以下定义一个接收多个参数的函数,使用柯里化将它,当它接收足够的参数时,就执行函数

const kunkun = (a, b, c, d) => console.log(`kunkun的特长是${a}、${b}、${c}、${d}`)

以下面例子简单手写一个柯里化函数(使用ES6)

// 定义一个currying函数,第一个参数接收一个函数,后面的形参用剩余参数收集
const currying = (fn, ...originArgs) => {
    // 返回一个函数,这个函数再次被调用时,形参再次用剩余参数收集
    return (...args) => {
        // 把每次收集到的形参用展开运算符展开合并到一个新的数组
        const totalArgs = [...originArgs, ...args]
        // 判断当前收集到的形参数量是否已经达到原函数的参数数量(function.length表示函数形参个数)
        if(totalArgs.length < fn.length){
            // 如果少于,则返回currying,并把之前收集到的形参带入
            return currying(fn, ...totalArgs)
        }else{
            // 如果已经打到原函数的参数个数,则直接返回原函数
            return fn(...totalArgs)
        }
    }
}

测试一下柯里化后的函数调用是否符合预期

console.log(currying(kunkun)('唱', '跳', 'RAP', '篮球'))
console.log(currying(kunkun)('唱')('跳')('RAP')('篮球'))
console.log(currying(kunkun, '唱', '跳', 'RAP')('篮球'))
console.log(currying(kunkun)('唱')('跳', 'RAP', '篮球'))

// 以上都是打印出:kunkun的特长是唱、跳、RAP、篮球

console.log(currying(kunkun)('唱')('跳', 'RAP'))
console.log(currying(kunkun)('唱')('跳'))

// 以上都是打印出:[Function]

最后附上一段大神的极简currying代码,思路与上面的写法是一样的

var curry = fn =>
    judge = (...args) =>
        args.length === fn.length
            ? fn(...args)
            : (arg) => judge(...args, arg)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值