函数式编程
1.什么是函数式编程?
-
把输入和输出之间的联系抽取出来,对过程进行抽 象
-
程序的本质:根据输入通过某种运算获得相应的输出,程序开发过程中会涉及很多有输入和 输出的函数x -> f(联系、映射) -> y,y=f(x)
-
函数式编程中的函数指的不是程序中的函数(方法),而是数学中的函数即映射关系,例如:y = sin(x),x和y的关系
-
相同的输入始终要得到相同的输出(纯函数)
-
函数式编程用来描述数据(函数)之间的映射
2.函数是一等公民
-
函数可以存储在变量中
-
函数作为参数
-
函数作为返回值
3.高阶函数
-
可以把函数作为参数传递给另一个函数
-
可以把函数作为另一个函数的返回结果
抽象可以帮我们屏蔽细节, 只需要关注与我们的目标 高阶函数是用来抽象通用的问题
4.闭包:
-
函数和其周围的状态(词法环境)的引用捆绑在一起形成闭包。 可以在另一个作用域中调用一个函数的内部函数并访问到该函数的作用域中的成员
-
闭包的本质:函数在执行的时候会放到一个执行栈上当函数执行完毕之后会从执行栈上移除,但是 堆上的作用域成员因为被外部引用不能释放,因此内部函数依然可以访问外部函数的成员
5.纯函数
相同的输入永远会得到相同的输出,而且没有任何可观察的副作用
-
可缓存 因为纯函数对相同的输入始终有相同的结果,所以可以把纯函数的结果缓存起来
-
可测试 纯函数让测试更方便 并行处理 在多线程环境下并行操作共享的内存数据很可能会出现意外情况 ,纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数 (Web Worker)
函数式编程不会保留计算中间的结果,所以变量是不可变的(无状态的) 我们可以把一个函数的执行结果交给另一个函数去处理