函数式编程
纯函数(Pure Function)
纯函数仅针对它们的输入参数进行操作,比如
function add(x, y) {
return x + y;
}
1
2
3
2
3
纯函数特性
- 纯函数针对给定相同的输入,总是产生相同的输出
- 纯函数没有函数副作用
高阶函数(Higher-order Function)
高阶函数可以接收函数作为参数,或者返回一个函数结果,或者两者同时具备
引用透明
纯函数可以被它的表达式安全地替换
函数式编程的特性
- 函数式编程中没有变量
- 函数式编程中,通过递归实现循环
// simple loop construct
var acc = 0;
for (var i = 0; i <= 10; i++) {
acc += i;
}
console.log(acc); // prints 55
// without loop construct or variable (recursion)
function sumRange(start, end, acc) {
if (start > end) {
return acc;
}
sumRange(start + 1, end, acc + start);
}
console.log(sumRange(1, 10, 0)); // prints 55
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
为什么函数式编程要求函数必须是纯的,不能有副作用?
因为它是一种数学运算,原始目的就是求值,不做其他事情,否则就无法满足函数运算法则了。
函数式编程基本运算
- 合成
- 柯里化