-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcurry.js
40 lines (35 loc) · 975 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
35
36
37
38
39
40
function getSum(a, b, c) {
return a + b + c
}
// es6
function fackCurry3(callback) {
return curryHandle = (...args) => {
// 如果参数相同或超出,直接返回结果
if (args.length >= callback.length) {
return callback(...args)
} else {
// 参数不足,则返回函数,继续调用
return (...args2) => curryHandle(...args.concat((args2)))
}
}
}
// es5
function fackCurry2(callback) {
return function curryHandle() {
var args = Array.prototype.slice.call(arguments)
if (args.length >= callback.length) {
return callback.apply(null, args)
} else {
return function () {
var args2 = Array.prototype.slice.call(arguments)
return curryHandle.apply(null, args.concat(args2))
}
}
}
}
// 柯里化后的函数
let curried = fackCurry2(getSum) // 测试
console.log(curried(1, 2, 3))
console.log(curried(1)(2,3))
console.log(curried(1, 2)(3))
console.log(curried(1)(2)(3))