从vue源码中学到的一些总结之函数的缓存
2020-08-05 本文已影响0人
Splendid飞羽
在设计模式专题中,我们了解到了代理模式,即在调用者与具体实现之间架设一层中间层,通过中间层去做一些操作
下面给大家介绍的就是vue中使用的缓存一个函数的常用做法
/**
* Create a cached version of a pure function.
*/
function cached(fn) {
var cache = Object.create(null);
return (function cachedFn(str) {
var hit = cache[str];
return hit || (cache[str] = fn(str))
})
}
/**
* Capitalize a string.
*/
var capitalize = cached(function (str) {
return str.charAt(0).toUpperCase() + str.slice(1)
});
let str = capitalize('sliderUp'); // SliderUp
console.log(str);
分析:首次运行代码的时候,capitalize返回的是一个闭包的function,当后面的真正传参并调用时,对对象进行缓存,如果下次初始化同样的字符串,那么直接从对象的key中获取结果即可。