![](https://img.haomeiwen.com/i8677783/af6e0376ead20bf7.png)
柯里化函数的实现hyCurrying
function add1(x, y, z) {
return x + y + z
}
// 柯里化函数的实现hyCurrying
function hyCurrying(fn) {
function curried(...args) {
// 判断当前已经接收的参数的个数, 可以参数本身需要接受的参数是否已经一致了
// 1.当已经传入的参数 大于等于 需要的参数时, 就执行函数
if (args.length >= fn.length) {
// fn(...args)
// fn.call(this, ...args)
return fn.apply(this, args)
} else {
// 没有达到个数时, 需要返回一个新的函数, 继续来接收的参数
function curried2(...args2) {
// 接收到参数后, 需要递归调用curried来检查函数的个数是否达到
return curried.apply(this, args.concat(args2))
}
return curried2
}
}
return curried
}
var curryAdd = hyCurrying(add1)
console.log(curryAdd(10, 20, 30))
console.log(curryAdd(10, 20)(30))
console.log(curryAdd(10)(20)(30))
![](https://img.haomeiwen.com/i8677783/02fb60a2d8df4b16.png)
网友评论