forked from Mayandev/fe-interview-handwrite
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcurry.js
34 lines (30 loc) · 735 Bytes
/
curry.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* 通用的 curry 化
* @param {*} targetfn
* @returns
*/
function curry(targetfn) {
var numOfArgs = targetfn.length;
return function fn() {
if (arguments.length < numOfArgs) {
return fn.bind(null, ...arguments);
} else {
return targetfn.apply(null, arguments);
}
}
}
function sum(a, b, c) {
return a + b + c;
}
const curried = curry(sum);
console.log(curried(1)(2)(3)) // 6
console.log(curried(1,2)(3)) // 6
function sum2(...args1) {
let x = args1.reduce((prev, next) => {return prev+next;})
return function(...args2) {
if (args2.length == 0) return x;
let y = args2.reduce((prev, next) => {return prev+next;})
return sum2(x+y)
}
}
console.log(sum2(1,2,2,5)(7)()) // 17