JS纯函数
2021-04-21 11:04:01
# JS纯函数
定义:一个函数的返回结果**只依赖于它传递的参数**,并且在执行过程中没有**副作用**。
**针对其传递的参数:**
```
//非纯函数
const a = 1
const foo = (b)=> a + b
foo(2) // 输出的是3
//纯函数
const a = 1
const foo = (b,c) => b+c
foo(1,2) // => 3
```
上述例子中foo函数输出的结果不仅依赖于其所传入参数b,还依赖于在外部定义的变量a;因此当a发生变化时,其输出结果会随之发生变化,所以其不是纯函数;第二个不依赖外部的变量a,所以不管什么时候执行,执行多少回,其输出结果都是一成不变的,因此为纯函数。
**针对其是否有副作用:**
是否对外部产生了变化,例如外部定义的变量的值,或者对象或其属性的值。
```
const a = 1
const foo = (object,b)=>{
return object.x + b
}
const textFoo = {x:3}
foo(testFoo,2) // => 5
testFoo.x // =>3 没有变化,为纯函数
const a = 1
const foo = (object,b)=>{
object.x = 1
return object.x + b
}
const textFoo = {x:3}
foo(testFoo,2) // => 4
testFoo.x // =>1 非纯函数
```
foo函数执行改变了外部的testFoo对象的属性值,这就是副作用,所以是不纯的。
为了组件的可维护性,所以在写函数时最好要是纯函数,利于封装继承;react组件函数大部分都是纯函数,这也是react组件化而互相影响(耦合性低)的强大之处。