函数式编程用来描述函数之间的映射 指的是数学中的函数映射关系
函数是一等公民:
- 函数可以储存在变量中
- 函数可以作为参数
- 函数可以作为返回值
高阶函数
- 可以把函数作为参数传递给另一个函数
- 可以把函数作为另一个函数的返回结果
高阶函数的意义
- 高阶函数是用来抽象通用的问题
- 抽象可以帮我们屏蔽细节只需要关注目的
纯函数
-
概念:相同的输入永远会得到相同的输出,且没有可观察到的副作用
-
好处:基于概念可知,我们可以对纯函数的结果进行缓存
副作用:如果函数依赖外部的状态 就不能保证相同的输入 有相同的输出
let mini = 18
function check(age){
return age >= mini
}
// 解决后 函数为纯函数 但存在硬编码,编程中应该尽量避免硬编码
function check(age){
let mini = 18
return age >=mini
}
以下方法可以解决硬编码,实现纯函数
function check(age, mini){
return age>=mini
}
check(18,20)
check(18,15)
check(18,30)
check(20,20)
以上代码出现的age参数可能会的有大量的重复,可以用以下方案解决
function check(base){
return function(num){
return base < num
}
}
let base10 = check(10)
base10(20)
base10(5)
上面代码就实现了函数的柯里化
柯里化:当一个函数有多个参数时,可以先传递部分的参数(之后该部分参数不变), 然后返回一个新的函数来接受剩余的参数,并返回结果
lodash是一个纯函数的库,可以直接使用其中的细粒函数
npm i lodash
const _ = require('lodash')