缓存例子1:
function useCache () {
const data = {}; // 存放要缓存的数据
return {
setItem: (key, value) => {
data[key] = value
},
getItem: key => {
return data[key]
}
}
}
const cache = useCache()
cache.setItem('a', '1')
cache.getItem('a')
上面代码能看到外部cache可以读取也可以设置useCache内部的data,由此实现了缓存。
缓存例子2:
function origin (a, b) {return a + b} // 原计算函数, a+b只是举个例子,可能有很复杂的运算
const computed = (() => {
const did = {}
return function (a, b) {
if (did[JSON.stringify(arguments)]) {
console.log('取缓存');
return did[JSON.stringify(arguments)]
}
console.log('新计算');
return did[JSON.stringify(arguments)] = origin(a, b) && origin(a, b)
}
})()
console.log(computed(1, 2));
console.log(computed(1, 2));
结果可见第一次新计算,第二次就取缓存了。
隔离变量和方法:
function useCache () {
const data = {};
const setItem = (key, value) => {
data[key] = value
}
const getItem = key => {
return data[key]
}
return {
state: {
data
},
getItem,
setItem
}
}
const cache = useCache()
console.log(cache.state.data);
cache.setItem('a', '1')
cache.getItem('a')
可以这样看,data、setItem、getItem是被隔离在useCache内的数据或方法,在外部可以读取到或调用,但也只有cache有这个权限。