我想实现类似缓存的闭包,将结果缓存起来以更快地执行。例如,假设给出了两个数字,目的是返回它们的乘积,首先我们查看高速缓存是否已计算过,如果是,则快速返回该值,否则应计算并保存在高速缓存中。
这是我实现的:
var Obj = {
h(x, y) {
return x + y;
},
slow(x, y) {
alert('called slow function with ' + x + ', ' + y);
return x * y * this.h(x, y)
}
}
function c (func){
var cache = {};
return function(x, y){
if (!cache[[x, y]]){
cache[[x, y]] = func(x, y);
}
return cache[[x, y]];
}
}
Obj.slow = c(Obj.slow);
alert(Obj.slow(1, 4));
alert(Obj.slow(1, 2));
alert(Obj.slow(1, 4));
alert(Obj.slow(1, 3));
alert(Obj.slow(1, 2));
alert(Obj.slow(1, 3));
我不知道为什么它不起作用。如果有人可以帮助我,我将不胜感激。
错误出现在第7行,关键字为this
。
TypeError:this.h不是函数
答案 0 :(得分:0)
=VLOOKUP($K$2,BackgroundData!$C$2:$H$4,2,FALSE)
在窗口上下文中运行调用时以慢速方法运行,因此没有this
方法可用。 h
的{{1}}上下文将使其起作用。
更新的代码
bind