函数式编程核心概念-副作用(Side effects)

1,905 阅读1分钟

        副作用是和纯函数的相对应的概念。副作用让一个函数变得不纯,它是产生非纯函数的一个主要因素。纯函数的根据相同输入始终有相同输出,如果依赖于外部状态,就无法保证输出相同就会产生副作用让函数变得不纯。

// 非纯函数
let mini = 18
function checkAge (age) {
    return age >= min
}

// 纯函数,但存在硬编码后面可以用通过柯里化解决
function checkAge (age) {
    const min = 18
    return age >= min
}

副作用的来源:

  • 全局变量
  • 配置文件
  • 数据库
  • 获取用户输入
  • ···

       总结:所用的外部交互都有可能产生副作用。副作用使得方法的通用性下降不适合扩展和我重用,同时副作用会给程序带来安全隐患,比如用户输入带来的跨站脚本攻击(xss)。但是副作用是不可能完全禁止的,应尽可能控制在可控范围内。