//基础函数
const sum = (a, b, c) => {
return [a,b,c]
}
ES5写法
/*
*cb为调用的函数,lens为最多接受的参数长度,array为初始的参数
*/
const curry = (cb, lens, array) => {
array = array || []
return function name () {
var args = Array.prototype.slice.call(arguments, 0)
var len = args.length
var array1 = array.concat(args)
if (array1.length < lens) {
return curry.call(null, cb, lens, array1)
} else {
return cb.apply(this, array1)
}
}
}
const curry1 = curry(sum, 3, [])
console.log(curry1(1)(2)(3)) // [1,2,3]
console.log(curry1(1,2)(3)) // [1,2,3]
console.log(curry1(1,2,3)) // [1,2,3]
ES6写法
const curry2 = (fn, len, ...argss) => {
return (...args) => {
let params = [...argss, ...args]
if (params.length < len) {
return curry2.call(null, fn, len, ...params)
} else {
return fn.apply(null, params)
}
}
}
const curry3 = curry(sum, 3, [])
console.log(curry1(4)(5)(6)) // [4,5,6]
console.log(curry1(4,5)(6)) // [4,5,6]
console.log(curry1(4,5,6)) // [4,5,6]
有问题欢迎大家指出讨论,谢谢