JavaScipt中如何实现函数缓存?函数缓存有哪些场景?

1、函数缓存是什么?
函数缓存就是将函数运行的结果进行缓存。本质上就是用空间(缓存存储)换时间(计算过程)
常用于缓存数据计算结果和缓存对象。
JavaScipt中如何实现函数缓存?函数缓存有哪些场景?_第1张图片
缓存只是一个临时的数据存储,它保存数据,以便将来对该数据的请求能够更快地得到处理。

2、如何实现函数缓存?
实现函数缓存主要依靠闭包,柯里化,高阶函数。
2.1、闭包
闭包可以理解成,函数+函数体内可访问的变量总和。
JavaScipt中如何实现函数缓存?函数缓存有哪些场景?_第2张图片
add函数本身,以及其内部可访问的变量,即a=1,这两个组合在一起就形成了闭包。

2.2、柯里化
把接受多个参数的函数转换成接受一个单一参数的函数
JavaScipt中如何实现函数缓存?函数缓存有哪些场景?_第3张图片
将一个二元函数拆分成两个一元函数。
2.3、高阶函数
通过接收其他函数作为参数或返回其他函数的函数
JavaScipt中如何实现函数缓存?函数缓存有哪些场景?_第4张图片
函数foo如何返回另一个函数bar,baz现在持有对foo中定义的bar函数的引用,由于闭包的特性,a的值可以被得到。
下面描述如何实现函数缓存,实现原理比较简单,把参数和对应的结果数据存在一个对象中,调用时判断参数对应的数据是否存在,存在就返回对应的结果数据,否则就返回计算结果。
JavaScipt中如何实现函数缓存?函数缓存有哪些场景?_第5张图片
调用方式也比较简单
JavaScipt中如何实现函数缓存?函数缓存有哪些场景?_第6张图片
过程分析:
在当前函数作用域定义了一个空对象,用于缓存运行结果
运用柯里化返回一个函数,返回的函数由于闭包特性,可以访问到cache
然后判断输入参数是不是在cache中,如果已经存在,直接返回cache中的内容,如果没存在,使用函数func对输入参数求值,然后把结果存储在cache中。

3、应用场景
虽然使用缓存效率非常高,但是并不是所有场景都适用,因此千万不要极端的将所有函数都添加缓存,
以下几种情况适合使用函数缓存:
对于昂贵的函数调用,执行复杂计算的函数
对于具有有限且高重复输入范围的函数
对于具有重复输入值的递归函数
对于纯函数,即每次使用特定输入调用时返回相同输出的函数。

你可能感兴趣的:(js,缓存)