纯函数:
function getSum (n1, n2) {
return n1 + n2
}
console.log(getSum(1, 2))
// slice方法,截取的时候返回截取的函数,不影响原数组, 是纯函数
// splice方法,返回原数组,改变原数组, 不是纯函数
- 函数式编程不会保留计算中间的结果,所以变量是不可变的;我们也可以把一个函数的执行结果交给另一个函数处理
优点:
因为对于相同的输入始终有相同的结果,那么可以把纯函数的结果缓存起来,可以提高性能
纯函数让测试更加的方便<br /> ii. 多线程环境下并行操作共享的内存数据很可能会出现意外情况。纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数<br /> 虽然JS是单线程,但是ES6以后有一个Web Worker,可以开启一个新线程<br /> c. 副作用: 副作用就是让一个函数变得不纯,纯函数的根据市相同的输入返回相同的输出,如果函数依赖于外部的状态就无法保证输出相同,就会带来副作用
副作用来源:
- 配置文件
- 数据库
- 获取用户的输入
……
所有的外部交互都有可能带来副作用,副作用也使得方法通用性下降不适合扩展和可重用性,同时副作用会给程序中带来安全隐患给程序带来不确定性,但 是副作用不可能完全禁止,我们不能禁止用户输入用户名 和密码,只能尽可能控制它们在可控范围内发生。