// function curry(fn){
// return function cruuied(...args){
// if(args.length >= fn.length){
// return fn.apply(this,args)
// } else {
// return function (...args2){
// return cruuied.apply(this,args.concat(args2))
// }
// }
// }
// }
// function curry(fn) {
// //2.获取curry的参数列表,没有fn
// var args = Array.prototype.slice.call(arguments, 1);
// return function() {
// //3.获取接下来传入的参数
// var nextArgs = Array.prototype.slice.call(arguments);
// //4.将两次获取的参数合并成一个数组
// var finalArgs = args.concat(nextArgs);
// //5.判断传入的参数个数是否到达要求函数需要传入个数
// if(finalArgs.length < fn.length) {
// //6.没有达到要求继续返回柯里化函数
// return curry(fn, ...finalArgs);
// }
// //7.利用apply将数组参数传入进去,返回调用函数的返回值
// return fn.apply(null, finalArgs);
// }
// }
function curry(fn,...args){
return (...callbackArgs)=>{
const currentArgs = [...args,...callbackArgs]
return fn.length === currentArgs.length ? fn(...currentArgs) : curry(fn,...currentArgs);
}
}
function sum(a, b, c) {
return a + b + c;
}
function once(){
console.log('run once')
}
let curriedSum = curry(sum,10);
// console.log( curriedSum(1, 2, 3) ); // 6,仍然可以被正常调用
// console.log( curriedSum(2,3)); // 6,对第一个参数的柯里化
// console.log( curriedSum(1)(2)) ; // 6,全柯里化
console.log(curry(once)())
console.log( curriedSum(1)(1))
console