思路:
- 就是把传入的参数存放起来
- 参数传够了, 执行回调
- 参数不够, 返回函数
写法1
function curry(cb: Function) {
let args: any[] = [];
function fn(...more: any[]) {
args = [...args, ...more];
if (args.length >= cb.length) {
return cb(...args);
}
return fn;
}
return fn;
}
测试
function sum(a: number, b: number, c: number) {
return a + b + c;
}
let curSum = curry(sum);
console.log(curSum(1,2)(3));
写法2: 加强版
function curry(fn, ...args) {
if(args.length >= fn.length) {
return fn(...args)
}
return (...more) => {
return curry(fn, ...args, ...more)
}
}
测试
function sum(a, b, c) {
return a + b + c;
}
let curSum = curry(sum);
console.log(curSum(1)(2)(3));
console.log(curSum(1)(2, 3)); // 写法1这里会报错
console.log(curSum(1, 2, 3));// 写法1这里会报错
console.log(curry(sum)(1)(2, 3));// 写法1这里会报错