备忘模式就是应用闭包的特点的一个典型应用。比如下面函数:
function add(a) {
return a+1;
}
所以这里可以利用闭包的特点来实现一个简单的缓存,在函数内部用一个对象存储输入的参数,如果下次再输入相同的参数,那就比较一下对象的属性。如果有缓存,就直接把值从这个对象里面取出来。
实现代码如下:
function memorize(fn) {
let cache = {};
return function(...args) {
let key = JSON.stringify(args)
if (!(key in cache)) {
console.log('需要计算')
cache[key] = fn.apply(fn, args)
}
return cache[key]
}
}
function add(a) {
return a + 1
}
var adder = memorize(add)
console.log(adder(1)); // 2
console.log(adder(1)); // 2
console.log(adder(2)); // 3
console.log(adder(3)); // 4
console.log(adder(1)); // 2