Pure Function

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进行操作
    • 纯函数不应该改变函数外部的可变变量

纯函数带来的好处

  • 降低代码耦合性,减少出错的风险

  • 利于进行测试,只要保证输入就能测试输出

  • 不受外部影响,纯函数是独立个体,不会因为外界变化造成逻辑错误

  • 没有副作用,利于封装复用,重构

posted on 2024-01-17 17:05  Karle  阅读(7)  评论(0编辑  收藏  举报