副作用是和纯函数的相对应的概念。副作用让一个函数变得不纯,它是产生非纯函数的一个主要因素。纯函数的根据相同输入始终有相同输出,如果依赖于外部状态,就无法保证输出相同就会产生副作用让函数变得不纯。
// 非纯函数
let mini = 18
function checkAge (age) {
return age >= min
}
// 纯函数,但存在硬编码后面可以用通过柯里化解决
function checkAge (age) {
const min = 18
return age >= min
}
副作用的来源:
- 全局变量
- 配置文件
- 数据库
- 获取用户输入
- ···
总结:所用的外部交互都有可能产生副作用。副作用使得方法的通用性下降不适合扩展和我重用,同时副作用会给程序带来安全隐患,比如用户输入带来的跨站脚本攻击(xss)。但是副作用是不可能完全禁止的,应尽可能控制在可控范围内。