纯函数函数式编程风格中有一个“纯函数”的概念。纯函数是没有副作用的函数。此外,纯函数还有一个显着的特点:对于相同的输入参数,总是返回相同的结果。性能提升在平时的开发过程中,我们也应该尽量把没有副作用的“纯计算”提取出来,实现为“纯函数”,尤其是涉及到大量重复计算的时候,使用纯函数+函数缓存可以大大提高程序执行效率。记忆我们可以创建一个独立的函数来记忆任何函数。我们称这个函数为memoize。当传入相同参数时,直接返回上一次缓存的结果,在计算大量重复数据时可以提高性能,functionmemoize(func){constcache={};returnfunction(...args){constkey=JSON.stringify(args)if(!cache.hasOwnProperty(key)){cache[key]=func.apply(this,args)}returncache[key]}}复制代码functionsum(n1,n2){constsum=n1+n2console.log(`${n1}+${n2}=${sum}`)返回总和}constmemoizedSum=memoize(sum)memoizedSum(1,2)//会打印:1+2=3memoizedSum(1,2)//没有输出memoizedSum在第一次执行时将执行结果缓存在闭包中的缓存对象缓存中,所以当执行到第第二次,因为入参相同,直接返回缓存的结果。更好的选择是使用ES6+支持的Map对象constmemoize2=fn=>{constcache=newMap();constcached=function(...val){返回cache.has(val)?cache.get(val):cache.set(val,fn.apply(this,val))&&cache.get(val);};cached.cache=缓存;返回缓存;};
