1 纯函数的运算结果可以缓存,优化性能 ( 因为纯函数对相同的输入始终会产生相同的结果,所以可以缓存纯函数的结果)
const _ = require("loadsh");// _.memoize(func, [resolver]) 创建一个会缓存 func 结果的函数。// 求圆形的面积const getArea = (r) => { console.log(r); return Math.PI * r * r;};const getAreaUseMomery = _.memoize(getArea);console.log(getAreaUseMomery(5));console.log(getAreaUseMomery(5));console.log(getAreaUseMomery(5));console.log(getAreaUseMomery(5));// 5// 78.53981633974483// 78.53981633974483// 78.53981633974483// 78.53981633974483// 只打印了一次 5 ,即第一次进行了运算,后面几次是取的缓存的数据// 手写一个 memoizeconst myMemoize = (fn) => { const obj = {}; return function () { const keys = JSON.stringify(arguments); obj[keys] = obj[keys] || fn.apply(fn, arguments); return obj[keys]; };};const getAreaUseMyMomery = myMemoize(getArea);console.log(getAreaUseMyMomery(5));console.log(getAreaUseMyMomery(5));console.log(getAreaUseMyMomery(5));console.log(getAreaUseMyMomery(5));// 5// 78.53981633974483// 78.53981633974483// 78.53981633974483// 78.53981633974483// myMemoize 通过内部变量 obj来缓存计算结果,缓存标记使用obj的key
2 可测试,让测试更方便 (单元测试 可以断言结果)
3 并行处理
· 在多线程环境下,并行操作共享的内存(全局变量)可能会出现意外情况
· 纯函数不需要访问共享的内存数据,所以在并行环境下,可以任意运行纯函数(web worker)