副作用(Side Effect)的主体是一个“过程”,即我们在命令式编程中提到的函数、方法等。副作用指这个“过程”运行后,不只是对传入值操作产生传出值,还对这两个值以外的部分产生了影响。
比如我们前端经常做的就是在方法中对“this”进行修改或绑定,即使我们在返回结果时并不显式地返回它。前面提到的可变的、按地址引用的对象增加了产生副作用的可能性,也催生了很多状态管理工具。
从编程思想的角度说,函数式编程和命令式编程的一个区别在于是否偏向通过副作用达到目标。