08-函数式编程
码路教育 6/22/2022
# 1. 柯里化
<script>
// 未柯里化的函数
function add(x,y,z){
return x+y+z;
}
console.log(add(20,10,30));
// 柯里化处理的函数
function add2(x){
return function(y){
return function(z){
return x+y+z;
}
}
}
console.log(add2(10)(20)(30));
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 经过柯里化处理的函数,可以简写:
<script>
let add2 = x=>y=>z=>x+y+z;
console.log(add2(10)(20)(30));
</script>
1
2
3
4
2
3
4
JS中函数的柯里化,我的认为:
只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数,这个过程,就是柯里化。
函数式编程:
- 让函数职责更加单一,在函数式编程,我们希望,一个函数处理问题尽可能单一,而不是将一大堆的处理过程交给一个函数来处理,所以,我们给函数传入的参数,应该非常灵活,可以先传入一部分参数,处理完后,再传其它参数。
<script>
// 没有经过柯里化处理
function add(x,y,z){
x = x+2;
y = y*2;
z = z*z;
//....
return x+y+z;
}
console.log(add(1,2,3));
// 把上面的函数进行柯化里处理
function add2(x){
x = x+2;
return function(y){
y = y*2;
return function(z){
z = z*z;
return x+y+z;
}
}
}
console.log(add2(1)(2)(3));
</script>
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
- 柯里化可以复用代码,如下:
<script>
function sum(m,n){
return m+n;
}
console.log(sum(10,1));
console.log(sum(10,2));
console.log(sum(10,3));
console.log(sum(10,4));
function sum2(count){
return function (num){
return count + num;
}
}
let makeSum = sum2(10)
console.log(makeSum(1));
console.log(makeSum(2));
console.log(makeSum(3));
console.log(makeSum(4));
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 2. 组合函数
我们要完成一个功能,需要调用两个函数才能实现,之前,就是依次调用这两个函数。那么我们每一次要用这个功能,就需要调用两次函数,操作上有点重复,能不能把这个函数组合成一个函数呢?
- 答:可以的
可以对两个多个函数进行组合,组合后的函数,我们叫组合函数。
<script>
function double(num){
return num*2;
}
function square(num){
return num ** 2;
}
// console.log(double(10));
// console.log(square(10));
// 需求:给一个数字,先乘以2,再平方
let count = 12;
let res = square(double(count))
console.log(res);
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15