今天看了下vue的源码,看到了一段缓存函数cached,并对其分析探究。
function cached(fn) {
// 创建一个空对象cache使用key,value对函数结果进行储存
var cache = Object.create(null);
return function cachedFn(str) {
var hit = cache[str];
// 如果有此函数fn(str)的储存则直接返回结果,没有则缓存到cache对象里
return hit || (cache[str] = fn(str));
};
}
上面vue的这段代码只能存储的函数参数为1个的情况,如果参数大于1个则无效~
// 只有一个参数a可行 var toUpperCase = cached(function(a) { return a.toUpperCase(); }); // 有两个参数a,b不行 var sum = cached(function(a,b) { return a+b; });
function cached2(fn) { var cache = Object.create(null); return function() { var args = Array.prototype.slice.call(arguments); if (args.length < 1) { throw new Error("no arguments"); } else { //通过拼接参数形成一个独一无二的键值对key var str = args.join("-"); // 当有缓存的时候直接取缓存的,没缓存则只需执行fn函数进行处理并缓存 return cache[str] || (cache[str] = fn.apply(fn, arguments)); } }; }
var sum = cached2(function(a, b) { return a + b; }); var toUpperCase2 = cached2(function(a) { return a.toUpperCase(); }); console.log("sum-----"); console.log(sum(1, 2)); //3 console.log(sum(1, 9)); //10 console.log(sum(1, 2)); //3 console.log(toUpperCase2("aa")); //AA console.log(toUpperCase2("bb")); //BB console.log(toUpperCase2("aa")); //AA
通过闭包,使用key,value键值对形式储存函数的执行结果,避免函数的重复运算。
本文采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
在JavaScript中,Promise是一种用于处理异步操作的对象,提供了一种简洁的方式来管理异步任务的成功和失败结果。要实现一个自定义的Promise函数,你需要了解以下几个关键概念:Promise构造函数:构造函数接收一个executor函数,exec
Workspaces是现代前端/Node.js项目管理中的一项强大功能,主要用于构建和维护monorepo(多包仓库)。通过workspaces,你可以在单个仓库中同时管理多个相互关联的包,使依赖管理、开发、构建和发布过程变得更加统一和高效。下面将详细介绍workspace...
JavaScript常见的设计模式通常在我们解决问题的时候,很多时候不是只有一种方式,我们通常有多种方式来解决,但是肯定会有一种通用且高效的解决方案,这种解决方案在软件开发中我们称它为设计模式。设计模式并不是一种固定的公式,而是一种思想,是一种解决问题的思路,恰当的使用设计...