纯函数

纯函数是指没有副作用的函数

一般的函数往往会产生一些副作用:

  • 改变一个全局变量、属性、数据结构
  • 改变函数内部参数的默认值
  • 过多处理用户输入
  • 抛出一个异常
  • 控制台打印信息
  • 查询dom、cookie、数据库

例如:

1
2
3
4
let e = 0
function increment(){
return e = e+1
}

这个函数就不是纯函数,因为它读取了外部的变量。这种依赖外部变量进行的计算,结果会变的很不确定,因为它自身无法保证i的值是恒定的。

对于纯函数具有以下特性:

  • 输出仅取决于输入,不依赖于任何函数外部的状态
  • 不会造成超出函数作用域的变化(逻辑层)

上例中用纯函数可表达为:

1
2
const increment = e => e+1
increment(0) //1

日常开发中,函数与外部有一些交互(数据存储、DOM)是正常需求,但是也可以通过划分主次逻辑,使得代码更容易管理和阅读。