最近有时间继续学习javascipt,https://zh.javascript.info/ 这个网站真不错。
学到缓存这里https://zh.javascript.info/call-apply-decorators#tou-ming-huan-cun 。绝对两个例子很好,转一下。
基本入门使用
<script> "use strict"; function slow(x) { // 这里可能会有重负载的 CPU 密集型工作 alert(`Called with ${x}`); return x; } function cachingDecorator(func) { let cache = new Map(); return function(x) { if (cache.has(x)) { // 如果缓存中有对应的结果 return cache.get(x); // 从缓存中读取结果 } let result = func(x); // 否则就调用 func cache.set(x, result); // 然后将结果缓存(记住)下来 return result; }; } slow = cachingDecorator(slow); alert( slow(1) ); // slow(1) 被缓存下来了 alert( "Again: " + slow(1) ); // 一样的 alert( slow(2) ); // slow(2) 被缓存下来了 alert( "Again: " + slow(2) ); // 和前面一行结果相同 </script>后来面向对象更加完善的例子。
<!DOCTYPE html><script>"use strict";let worker = {slow(min, max) {alert(`Called with ${min},${max}`);return min + max;}};function cachingDecorator(func, hash) {let cache = new Map();return function() {let key = hash(arguments); // (*)if (cache.has(key)) {return cache.get(key);}let result = func.call(this, ...arguments); // (**)cache.set(key, result);return result;};}function hash(args) {return args[0] + ',' + args[1];}worker.slow = cachingDecorator(worker.slow, hash);alert( worker.slow(3, 5) ); // worksalert( "Again " + worker.slow(3, 5) ); // same (cached)</script>