函数式编程

函数式编程

提及函数式编程,就不得不说范畴论

范畴论是抽象地处理数学结构以及结构之间联系的一门数学理论 –百度百科

而函数式编程则是范畴论在计算机编程方面的应用。

概念

什么是函数

这里讲的函数是数学中函数的概念。函数概念含有三个要素:定义域A值域B对应法则f。其中核心是对应法则f,它是函数关系的本质特征。
函数
映射关系是函数的本质特征

函数式编程

在计算机中,数据总是从某种状态经过计算转换成另一种状态,计算机计算则是执行不同状态的变形关系的过程。

函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
和过程化编程相比,函数式编程里函数的计算可随时调用。
百度百科

JavaScript中的function

函数式编程方法要在JavaScript中实践,必然绕不开JavaScript中的函数对象。在JavaScript中谈论函数,你一定听过

函数是JavaScript语言中的一等公民
由此可见,函数是JavaScript语言中非常重要的组成部分。函数在JavaScript中的位高权重主要体现在以下几个方面:

可以作为表达式赋值给变量

1
const f1 = function(){}

上面的代码中,一个匿名函数对象被赋值给变量f1

可以作为返回值

1
2
3
4
5
6
7
8
const f1 = function() {
console.log('create a function')
return function() {
console.log('function execute')
}
}
const f2 = f1();
f2();

上面的代码中,创建一个变量f2来接收f1函数执行后返回的另一个函数。因为f1返回的是一个函数,因此f2可以在需要的地方被调用。

可以作为参数传递

1
2
3
4
5
6
const f1 = function(x){ return x * x; }
const arr = [1, 2, 3];

const arr2 = arr1.map(f1);

console.log(arr2)

上面的代码中f1作为map函数的入参被传递。

函数作用域

在ES6以前,JavaScript中语言中并没有像C语言这样的“块级作用域(block scope)”。函数内声明的变量不能被函数外访问,JavaScript中变量的访问权限是函数隔离的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function f1(num) {
var i = 0;
if(num == 222) {
var j = 0;
for(var k=0; k<2; k++) {
console.log(k);
}
console.log(k);
}
console.log(i);
console.log(j);
console.log(k);
}
f1();

函数式编程
https://jacksiongt.github.io/2021/04/30/函数式编程/
作者
Jacksion
发布于
2021年4月30日
许可协议