Pure Function 纯函数
1.纯函数一定要有输入和输出,函数内使用到的变量最好都应该从参数中获取
const pure = (a,b,c) {
return a + b + c
}
let c = 1
const impure = (a, b) {
return a + b + c
}
const RATE = 2
const pure = (a,b) {
return a * b * RATE
}
- 第一个函数使用到的变量全都来自于传参,因此是纯函数
- 第二个函数则使用到了外界参数,会存在外界参数被改变的风险,所以不是纯函数
- 第三个虽然使用到了外界参数,但是因为RATE是静态变量,不会再次改变值,所以第三个函数是纯函数
2.只会在乎函数内的逻辑,不与外界有联系
外界的参数变化不会导致纯函数的输出结果
//pure function
const pure = (a) => {
return a * a
}
//impure function
let _a = 1
const pure = (a) => {
return a * _a
}
- 第一个函数做了一个参数平方的处理。无论全局上下文做了什么处理,只要每次输入的参数a都相同,那么这个函数返回的结果都会相同
- 第二个函数做了一个参数和外界变量相乘的处理。在这个例子中,_a这个变量是会被改变的,这样即使每次输入相同的参数a,却不能保证函数返回相同的结果,因此他不是纯函数
纯函数只会进行参数读取、处理、返回,除此之外不会对有副作用
const pure = (a,b) => {
return a + b
}
const impure = (a,b) => {
const res = a + b
console.log(res)
return res
}
- pure()对参数进行相加处理,然后进行结果返回,至此该函数工作结束
- impure()对参数处理后,在返回前进行了结果打印,这是非纯函数带来的
- 纯函数不应该使用I/o进行操作
- 纯函数不应该改变函数外部的可变变量
纯函数带来的好处
-
降低代码耦合性,减少出错的风险
-
利于进行测试,只要保证输入就能测试输出
-
不受外部影响,纯函数是独立个体,不会因为外界变化造成逻辑错误
-
没有副作用,利于封装复用,重构