定义

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态

用处

  • 一般是对函数结果的缓存,
  • 数据缓存

在我们的开发中偶尔会遇到这样一种情况,需要对用户的行为进行撤销。要想实现撤销,首先需要保存软件系统的历史状态,当用户执行撤销时用之前的状态覆盖当前状态。
使用场景:分页控件、撤销组件

demo

需求

  1. var add = function(a) {
  2. return a + 1;
  3. }

每次运行add(1)的时候都会输出2,但是输入1每次还是会计算一下1+1,如果是开销很大的操作的话就比较消耗性能了,这里其实可以对这个计算进行一次缓存。

所以这里可以利用高阶函数的思想来实现一个简单的缓存,我可以在函数内部用一个对象存储输入的参数,如果下次再输入相同的参数,那就比较一下对象的属性,把值从这个对象里面取出来。

实现

  1. const memorize = function(fn){
  2. const cache = {};
  3. return function(...args){
  4. const _args = JSON.stringify(args);
  5. console.log(cache);
  6. return cache[_args] || (cache[_args] = fn.apply(fn,args))
  7. }
  8. };
  9. const add = function(a,b){
  10. return a+b;
  11. };
  12. const adder = memorize(add);
  13. adder(1,2); // 3 { '[1,2]': 3 }
  14. adder(1,2); // 3 { '[1,2]': 3 }
  15. adder(2,2); // 4 { '[1,2]': 3, '[2,2]': 4 }