实现add(1)(2)(3)或add(1)(2)(3).done()

本文最后更新于:2023年3月19日 晚上

普通

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function add(num1) {
let res = num1;
function sum(num2) {
if (num2) {
res += num2;
return sum;
}
}
sum.toString = function () {
return res;
};
sum.done = function () {
return res;
};

return sum;
}

console.log(add(1)(2));
console.log(add(1)(2).done());

科里化

科里化实现无限,add(1,2)(3,4,5)(6)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function add(...args1) {
let res = [...args1];

function sum(...args2) {
if ([...args2].length > 0) {
res = [...args1, ...args2];
return sum;
}
}
sum.toString = function () {
return res.reduce((a, b) => a + b);
};
sum.done = function () {
return res.reduce((a, b) => a + b);
};

return sum;
}

console.log(add(1)(2, 3, 4, 5));