什么是纯函数
纯函数是函数式编程里面非常重要的一个概念
如果一个函数是纯函数,那么必须满足一下两个条件:
1、返回的结果是依赖于自身的参数
2、函数在执行的过程中不会有副作用
函数结果只依赖于它的参数
案例1
const a = 1
const foo = (b) => a + b
foo(2) // => 3
foo不是纯函数,foo函数的结果依赖于全局定义的变量,虽然a是个常量,但在一些特殊模式下,常量值也是可以修改的
案例2
const a = 1
const foo = (x, y) => x + y
foo(a, 2)
foo是纯函数,foo的返回结果只依赖于参数x和y
函数执行过程没有产生副作用
案例1
const counter = { x: 1 }
const foo = (obj, b) => {obj.x = 2return obj.x + b
}foo(counter, 2) // => 4
counter.x // => 2
foo不是纯函数,foo在调用的过程中改变了counter.x的值
案例2
const counter = { x: 1 }
const foo = (obj, b) => {return obj.x + b
}foo(counter, 2) // => 3
counter.x // => 1
foo是纯函数,函数调用过程中没有产出副作用
案例3
const foo = (b) => {const obj = { x: 1 }obj.x = 2return obj.x + b
}
是纯函数,同案例2
除了修改外部的变量,一个函数在执行过程中还有很多方式产生外部可观察的变化,比如说调用 DOM API 修改页面,或者你发送了 Ajax 请求,还有调用 window.reload 刷新浏览器,甚至是 console.log 往控制台打印数据也是 副作用