1. 纯函数:

      1. function getSum (n1, n2) {
      2. return n1 + n2
      3. }
      4. console.log(getSum(1, 2))
      5. // slice方法,截取的时候返回截取的函数,不影响原数组, 是纯函数
      6. // splice方法,返回原数组,改变原数组, 不是纯函数
      1. 函数式编程不会保留计算中间的结果,所以变量是不可变的;我们也可以把一个函数的执行结果交给另一个函数处理
      2. 优点:

        1. 因为对于相同的输入始终有相同的结果,那么可以把纯函数的结果缓存起来,可以提高性能

                 纯函数让测试更加的方便<br />   ii. 多线程环境下并行操作共享的内存数据很可能会出现意外情况。纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数<br />                     虽然JS是单线程,但是ES6以后有一个Web Worker,可以开启一个新线程<br />  c. 副作用: 副作用就是让一个函数变得不纯,纯函数的根据市相同的输入返回相同的输出,如果函数依赖于外部的状态就无法保证输出相同,就会带来副作用
          
        2. 副作用来源:

          1. 配置文件
          2. 数据库
          3. 获取用户的输入

    ……
    所有的外部交互都有可能带来副作用,副作用也使得方法通用性下降不适合扩展和可重用性,同时副作用会给程序中带来安全隐患给程序带来不确定性,但 是副作用不可能完全禁止,我们不能禁止用户输入用户名 和密码,只能尽可能控制它们在可控范围内发生。