定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态
用处
- 一般是对函数结果的缓存,
- 数据缓存
在我们的开发中偶尔会遇到这样一种情况,需要对用户的行为进行撤销。要想实现撤销,首先需要保存软件系统的历史状态,当用户执行撤销时用之前的状态覆盖当前状态。
使用场景:分页控件、撤销组件
demo
需求
var add = function(a) {return a + 1;}
每次运行add(1)的时候都会输出2,但是输入1每次还是会计算一下1+1,如果是开销很大的操作的话就比较消耗性能了,这里其实可以对这个计算进行一次缓存。
所以这里可以利用高阶函数的思想来实现一个简单的缓存,我可以在函数内部用一个对象存储输入的参数,如果下次再输入相同的参数,那就比较一下对象的属性,把值从这个对象里面取出来。
实现
const memorize = function(fn){const cache = {};return function(...args){const _args = JSON.stringify(args);console.log(cache);return cache[_args] || (cache[_args] = fn.apply(fn,args))}};const add = function(a,b){return a+b;};const adder = memorize(add);adder(1,2); // 3 { '[1,2]': 3 }adder(1,2); // 3 { '[1,2]': 3 }adder(2,2); // 4 { '[1,2]': 3, '[2,2]': 4 }
