function add(a, b, c, d) {
return a + b + c + d
}
function fixedParamsCurry(fn) {
var _arg = [].slice.call(arguments, 1)
return function() {
var newArg = _arg.concat([].slice.call(arguments, 0))
return fn.apply(this, newArg)
}
}
// fn.length 代表fn的形参个数
function curry(fn, len) {
var len = len || fn.length
return function() {
if (arguments.length < len) {
var combine = [fn].concat([].slice.call(arguments, 0))
return curry(
fixedParamsCurry.apply(this, combine),
len - arguments.length
)
} else {
return fn.apply(this, arguments)
}
}
}
var newAdd = curry(add)
// 10
console.log(newAdd(1)(2)(3)(4))
// 10
console.log(newAdd(1, 2)(3)(4))
// 10
console.log(newAdd(1, 2, 3)(4))
网友评论