js的高级用法——柯里化
javascript">function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(this, args)
} else {
const h = function(...args2) {
return curried.apply(this, args.concat(args2)) // 这是个轮询,走到最后还是会return值
}
return h
}
}
}
function sum(a,b,c,d) {
return a+b+c-d
}
const curriedSum = curry(sum)
console.log(curriedSum(4)(3)(2)(1)) // 8
console.log(curriedSum(1, 2)(3, 4)) // 2
console.log(curriedSum(1)(2, 3)(4)) // 2
console.log(curriedSum(1, 2, 3, 4)) // 2