纯函数的第二个特点: 没有任何可观察的副作用。

  1. // 两个例子 解释副作用
  2. const limit = 18 ;
  3. const checkAge = age => age >= limit;
  4. // 上面的例子是 不纯函数 因为limit 是全局变量,例如age=20; limit为18 是true , limit为22, 是false
  5. const checkAgePure = age =>{
  6. let limit = 18;
  7. return age >= limit
  8. }
  9. // 上面的例子是 纯函数,但是 内部写了limit为18 。属于硬编码,这种方式不友好,可以通过柯理化解决

副作用 : 会让一个函数变的不纯,纯函数相同的输入会产生相同的输出。如果函数依赖于外部的状态 就无法保证输出相同,就会带来副作用。


副作用来源 : 外部状态、数据库、配置文件、用户输入…

所有的与外部交互都有可能带来副作用。副作用也是的方法的通用性下降,不适合拓展和可重用性。同时副作用会给程序带来安全隐患和不确定性。
但是副作用不可能完全禁止,尽可能控制他们在可控的范围内发生。