函数式编程

旧城冷巷雨未停 提交于 2019-11-28 08:33:21

  

相对于面向对象编程关注的是数据而言,函数式编程关注的是动作,是一种过程抽象的思维,就是对当前的动作去进行抽象。

函数式编程具有两个基本特征:

(1)函数是第一等公民;

(2)函数是纯函数

函数是第一等公民

指函数跟其他数据类型一样处于平等地位,可以赋值给其他变量,可以作为参数传入另一个函数,也可以作为别的函数的返回值。

 

纯函数

定义是对于相同的输入,永远会得到相同的输出,并且不会产生副作用的函数。无副作用指的是函数内部的操作不会对外部产生影响(如修改全局变量的值、修改DOM的值)

//是纯函数
function add(x,y){
    return x+y;
}
//输出不确定,不是纯函数
function random(x){
    return Math.random()*x;
}
//输出不确定,有副作用,不是纯函数
function setColor(el,color){
    el.style.color=color;
}      

//在js中,slice()是纯函数,每次传入相同的值返回同样的结果;splice()是不纯的。

//不纯的
var min = 18;
var checkage = age => age > min;

//纯的,这很函数式
var checkage = age => age > 18;

  在不纯的版本中,函数的行为不仅取决于输入的参数,还可能取决于一个外部的变量,换句话说,这个函数的行为需要外部的系统环境决定。对于大型系统来说,对于这种外部状态的依赖是造成系统复杂性大大提高的主要原因。

 

函数式编程具有两个最基本的运算:合成和柯里化

函数合成是将代表各个动作的多个函数合并成一个函数。

函数柯里化是把接受多个参数的函数变成接受一个单一参数的函数,并且返回接收余下参数而且返回结果的新函数的技术。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!