使用闭包实现缓存

时间:2018-10-31 18:27:04

标签: javascript caching closures

我想实现类似缓存的闭包,将结果缓存起来以更快地执行。例如,假设给出了两个数字,目的是返回它们的乘积,首先我们查看高速缓存是否已计算过,如果是,则快速返回该值,否则应计算并保存在高速缓存中。

这是我实现的:

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不是函数

1 个答案:

答案 0 :(得分:0)

=VLOOKUP($K$2,BackgroundData!$C$2:$H$4,2,FALSE) 在窗口上下文中运行调用时以慢速方法运行,因此没有this方法可用。 h的{​​{1}}上下文将使其起作用。

更新的代码

bind