函数式编程
函数是一等公民
函数是一等公民的表现:
- 函数可以储存为变量
1
let four = () => 4
- 函数可作为数组的一个元素
1
let four = [4, () => 4]
- 函数可作为对象的成员
1
let four = {num: 4, func: () => 4}
- 函数可以在使用时直接创造出来
1
let four = 2 + (() => 2)()
- 函数可作为参数传递给另一个函数
1
2
3let four = (num, f) => num + f()
four(2, () => 2) - 函数可以被另一函数返回
1
let four = () => () => 4
其实,满足第5点或第6点的函数被称为 高阶函数
Applicative编程
Applicative编程是函数式编程的一部分(特殊的函数式编程形式),其典型的代表就是 map
、reduce
以及 filter
函数。
Applicative编程的其它实例:
- reduceRight
- find
- reject
- all
- any
- sortBy | groupBy | countBy
函数柯里化
函数柯里化可以保存某些需要多次调用的操作,还可以将多个参数分割,每次只传递一个参数,让函数看起来就像是在一步步的操作数据。
一阶柯里化:
1 |
|
使用示例:
1 |
|
二阶柯里化(这里选择从右到左):
1 |
|
使用示例:
1 |
|
三阶柯里化(从右到左调用参数):
1 |
|
使用示例:
1 |
|
curry => partial => compose
递归
相互递归
实现判断奇偶性就是一个相互递归的很好的例子:
1 |
|
递归实现深克隆
简单版本:
1 |
|
JS函数式库
可编译为js的函数式编程语言
来源:Hexo
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 许可协议。著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。