Skip to content

柯里化函数

实现定参数的柯里化函数

实现一个函数,该函数可以将一个普通函数转换为柯里化函数。

柯里化函数的能力是将一个多参数函数转换为一系列单参数函数。 也就是将一个函数的参数拆分成多个函数,每个函数可以不定数量的参数直到参数数量等于原函数的参数数量。

代码展示
js
const currying = (fn) => {
    const curried = (...args) => {
        if (args.length === fn.length)
            return fn(...args)
        else
            return (...args2) => {
                return curried(...args, ...args2)
            }
    }
    return curried
}
使用展示
js
const add = (a, b, c) => {
    return a + b + c
}
const curriedAdd = currying(add)
console.log(curriedAdd(1)(2)(3)) // 6
console.log(curriedAdd(1, 2)(3)) // 6
console.log(curriedAdd(1)(2, 3)) // 6
console.log(curriedAdd(1, 2, 3)) // 6

实现不定参数的柯里化函数

也就是当传参为空时,返回原函数的结果。

代码展示
js
// 利用闭包保存参数
const currying = (fn) => {
    let arr = []
    const curried = (...args) => {
        if (args.length === 0)
            return fn(...arr)
        else {
            arr.push(...args)
            return curried
        }
    }
    return curried
}