function curry(fn){ var args=Array.prototype.slice.call(arguments) //转真数组 var len=fn.length //fn形参数 return function (){ var argus=Array.prototype.slice.call(arguments) //转数组 var parameter=args.concat(argus) //总参数数组 if(parameter.length<len+1){ //parameter 参数多一个fn,所以len+1,兼容一下 return curry.apply(null,parameter) }else{ parameter.shift() //把第一个参数fn删除 return fn.apply(null,parameter) } } } var cur = curry(add, 1, 2) function add(a, b, c, d) { return a + b + c + d } var s = cur(3) console.log(s(4)); console.log(cur(4,5));
ES6
function curry(fn, ...args){
var len=fn.length
return function (...v){ var arr=[...args, ...v] if(arr.length < len){ return curry(fn, ...arr) }else { return fn(...arr) } } }
function add(a, b, c, d) {
return a + b + c + d
}
var cur = curry(add, 1, 2)
var s = cur(3)
console.log(s(4)); //10
浙公网安备 33010602011771号