柯里化函数
实现定参数的柯里化函数
实现一个函数,该函数可以将一个普通函数转换为柯里化函数。
柯里化函数的能力是将一个多参数函数转换为一系列单参数函数。 也就是将一个函数的参数拆分成多个函数,每个函数可以不定数量的参数直到参数数量等于原函数的参数数量。
代码展示
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
}