13. 柯里化原理模拟
leezozz 1/27/2023 js
function getSum(a,b,c) {
return a + b + c
}
const curried = curry(getSum)
console.log(curried(1, 2, 3))
console.log(curried(1)(2, 3))
console.log(curried(1, 2)(3))
// 柯里化原理模拟
// 调用curry方法,传递一个纯函数,调用完成之后返回一个函数,这个函数是柯里化之后的函数
function curry(func) {
return function curriedFn(...args) {
// 判断实参和形参的个数
if(args.length < func.length) {
return function() {
// 参数合并
// 伪数组转换为数组 Array.from(arguments) 【常见的伪数组:函数中的arguments】
// 合并两个数组 concat()方法
return curriedFn(...args.concat(Array.from(arguments)))
}
}
return func(...args)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24