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组件化而互相影响(耦合性低)的强大之处。