function curry() {
var fn = arguments[0];
var args = Array.prototype.slice.call(arguments, 1);
if(args.length === fn.length){
return fn.apply(this, args);
}
function _curry(){
args.push(...arguments);
if(args.length === fn.length){
return fn.apply(this, args);
}
return _curry;
}
return _curry;
}
function add(a, b, c) {
return a + b + c;
}
//正常调用 add 函数
add(1, 2, 3);
// 通过调用通用柯里化函数来实现调用
console.log(curry(add)(1)(2)(3)); // 6
console.log(curry(add, 1)(2)(3)); // 6
console.log(curry(add, 1, 2, 3)); // 6
console.log(curry(add, 1)(3, 4)); // 8
var addCurrying = curry(add)(2);
console.log(addCurrying(7)(8)); // 17