一、以函数式编程思想实现的库lambda、underscore?
二、函数式编程是什么?
函数式编程是一种编程范式。js 中使用的编程范式还有命令式、依赖原型链的面向对象的范式、以及元编程。
函数式编程:不直接操作变量,对一系列逻辑抽象成函数,再对函数进行组合,完成系统开发。
三、函数式编程的特点?
函数是一等公民。指的是函数与其他数据类型一样,处于平等地位,可以赋值给其他变量,也可以作为参数,传入另一个函数,或者作为别的函数的返回值
只用"表达式",不用"语句"。"表达式"(expression)是一个单纯的运算过程,总是有返回值;"语句"(statement)是执行某种操作,没有返回值
没有"副作用"。指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。函数式编程强调没有"副作用",意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
不修改状态。
引用透明。引用透明(Referential transparency),指的是函数的运行不依赖于外部变量或"状态",只依赖于输入的参数,任何时候只要参数相同,引用函数所得到的返回值总是相同的。
四、函数式编程的好处?
代码简洁,开发快速。通用性复用性更高,维护性更好,作用域局限,副作用少。
更方便的代码管理。函数式编程不依赖、也不会改变外界的状态,只要给定输入参数,返回的结果必定相同。因此,每一个函数都可以被看做独立单元,很有利于进行单元测试(unit testing)和除错(debugging),以及模块化组合。
接近自然语言,易于理解。
易于"并发编程"。
五、常见的函数式编程的场景
闭包、偏函数、柯里化、compose、链式调用、高阶函数
六、参考
http://taobaofed.org/blog/2017/03/16/javascript-functional-programing/