目录
如果有小伙伴想要回顾之前的知识的话,点击下面的链接查看之前所有的学习栏目👇:
《大前端学习专栏:目录》
什么是函数式编程
函数式编程(Functionnal Programming,FP)是一种编程范式。我们平时接触的最多的是面向对象式的编程范式,所以我们在学习JS或者是JAVA的时候最开始都是从面向对象的编程思维开始学习。
面向对象编程的思维方式是:将现实中的事物抽象成类、对象,并且由封装、继承多态来演示事物之间的关系。
然而函数式编程的思维方式正好就是面向对象思维方式反过来:将现实中的事物之间的关系抽象到程序世界,所以,函数式编程的函数,并不是程序中写的函数,而是数学中的函数,表示一种映射关系,如:y=f(x)。相同的结果必须要有相同的输出(纯函数)。
以下是一个简单的函数式编程实现:
//非函数式
let a = 1;
let b = 1;
let sum = a + b;
console.log(sum) //2
//函数式编程
const sum = (a,b) => a + b;
console.log(sum(1,1)) //2
为什么要学习函数式编程
其实函数式编程是一种非常古老的概念,在第一台计算机出现之前就已经有这种思维方式了。那为什么我们还要学习函数式编程呢?
- React hooks的流行使函数式编程得到越来越多的关注
- 函数式可以抛弃繁杂的
this
- Vue3开始拥抱函数式编程
- 方便进行单元测试,单元管理
由此可见,函数式编程渐渐的成为了一种新趋势。
函数式一等公民
《MDN:First-class Function(头等函数)》在MDN中有这样的描述,函数是一等公民。
- 可以把函数赋值给一个变量:
const sum = (a,b) => a + b;
- 函数可以作为参数传递:
function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
// 传递 `sayHello` 作为 `greeting` 函数的参数
greeting(sayHello, "JavaScript!"); // Hello, JavaScript!
- 函数可以作为另一个函数的返回值,之所以可以返回一个函数,是因为在 Javascript 中,函数可被作为值来对待。
function sayHello() {
return function() {
console.log("Hello!");
}
}