文章内容输出来源:拉勾大前端高薪训练营
函数是一等公民
函数在js中的本质就是对象。所以函数可以出现在对象可以出现的任何位置。
1. 函数可以作为变量。此后可以通过变量调用函数。
2. 函数可以作为参数。
3. 函数可以作为返回值。
闭包
闭包的本质就是返回值为函数的高阶函数。
特点是: 该返回函数引用了作用域以外的变量。
纯函数
纯函数就是数学概念中的函数,描述了现实世界中的一种映射关系。
其特点是:给其相同的输入永远会毫无例外的会得到相同的输出。
函数的副作用
函数的副作用是指相同的输入并不总是返回相同的输出。
也就是说:一个函数若存在副作用,则该函数一定不是纯函数。
高阶函数
高阶函数的本质就是函数。特点是:其参数或返回值也是函数。
函数的柯里化
函数柯里化的本质就是参数为函数并且返回值也为函数的高阶函数。
特点是: 调用返回值函数时,
要么返回参数函数的执行结果(调用返回值函数时传递的参数个数正好为参数函数的形参个数时),
要么返回一个特殊函数(该函数的参数为参数函数形参个数减去本次调用实际传参个数之后的剩余参数),
值得注意的是该特殊函数又是一个柯里化函数。
函数组合
函数组合的本质就是拥有多个函数参数并且返回值也为函数的高阶函数。
特点是: 可以将不同细粒度的函数组合成功能更强大的业务处理函数。
函子
函子的本质就是内部有值的容器。特点是: 函子容器内都有map函数。
map函数是一个参数为函数的高阶函数,同时map函数会返回一个新的函子容器。
map的参数函数来源于外部,专门用于改变函子内部的值。
基于函子的这种设计,函子的使用者可以链式调用map函数对函子内部的值进行任意次处理。
**常见的函子**
Functor/MayBe/Either/IO/Task/Monad
常见函数式编程辅助库
1. lodash
2. undercore
3. ramda