1 纯函数的运算结果可以缓存,优化性能 ( 因为纯函数对相同的输入始终会产生相同的结果,所以可以缓存纯函数的结果)

  1. const _ = require("loadsh");
  2. // _.memoize(func, [resolver]) 创建一个会缓存 func 结果的函数。
  3. // 求圆形的面积
  4. const getArea = (r) => {
  5. console.log(r);
  6. return Math.PI * r * r;
  7. };
  8. const getAreaUseMomery = _.memoize(getArea);
  9. console.log(getAreaUseMomery(5));
  10. console.log(getAreaUseMomery(5));
  11. console.log(getAreaUseMomery(5));
  12. console.log(getAreaUseMomery(5));
  13. // 5
  14. // 78.53981633974483
  15. // 78.53981633974483
  16. // 78.53981633974483
  17. // 78.53981633974483
  18. // 只打印了一次 5 ,即第一次进行了运算,后面几次是取的缓存的数据
  19. // 手写一个 memoize
  20. const myMemoize = (fn) => {
  21. const obj = {};
  22. return function () {
  23. const keys = JSON.stringify(arguments);
  24. obj[keys] = obj[keys] || fn.apply(fn, arguments);
  25. return obj[keys];
  26. };
  27. };
  28. const getAreaUseMyMomery = myMemoize(getArea);
  29. console.log(getAreaUseMyMomery(5));
  30. console.log(getAreaUseMyMomery(5));
  31. console.log(getAreaUseMyMomery(5));
  32. console.log(getAreaUseMyMomery(5));
  33. // 5
  34. // 78.53981633974483
  35. // 78.53981633974483
  36. // 78.53981633974483
  37. // 78.53981633974483
  38. // myMemoize 通过内部变量 obj来缓存计算结果,缓存标记使用obj的key

2 可测试,让测试更方便 (单元测试 可以断言结果)

3 并行处理

· 在多线程环境下,并行操作共享的内存(全局变量)可能会出现意外情况

· 纯函数不需要访问共享的内存数据,所以在并行环境下,可以任意运行纯函数(web worker)