// 函数柯里化
// 核心实现是:通过闭包
var currySub = function (fn) {
// 注意这个要保存后面的参数内容传给
let args = Array.prototype.slice.call(arguments, 1);
return function (...arg) {
return fn.apply(null, args.concat(arg));
}
};
function curry(fn, length) {
// length限制输入的参数长度,没有则取函数的参数长度
length = length || fn.length;
return function(...arg) {
if (arg.length < length) {
const combin = [fn].concat(arg);
return curry(currySub.apply(null, combin), length - arg.length);
}
return fn.apply(this, arg);
}
}
function add(a, b, c) {
return a + b + c;
}
var addCurry = curry(add);
// // addCurry() // 3
console.log(addCurry(1)(2)(3));
// var addCurry = curry(add, 1);
// console.log(addCurry(2)); // 3
//或者
// var addCurry = curry(add);
// console.log(addCurry(1, 2)) // 3
console