这个JavaScript函数如何缓存其结果?
读了几遍之后,我仍然不明白第76页的示例代码是如何工作的。我还不是忍者。但对我来说,它读起来就像只存储一个空对象:这个JavaScript函数如何缓存其结果?,javascript,caching,hash,memoization,Javascript,Caching,Hash,Memoization,读了几遍之后,我仍然不明白第76页的示例代码是如何工作的。我还不是忍者。但对我来说,它读起来就像只存储一个空对象: var myFunc = function (param) { if (!myFunc.cache[param]) { var result = {}; // ... expensive operation ... myFunc.cache[param] = result; } return myFunc.cache[param]; }; //
var myFunc = function (param) {
if (!myFunc.cache[param]) {
var result = {};
// ... expensive operation ...
myFunc.cache[param] = result;
}
return myFunc.cache[param];
};
// cache storage
myFunc.cache = {};
除非那个看不见的“昂贵操作”正在存储回结果
,否则我看不到任何东西被保留
结果存储在哪里
附言:我读过,这是一个类似的练习,我明白了。但是这里的代码不同。它说//昂贵的操作-推断是您在那里实现的代码将变量分配到结果变量,或将结果变量设置到另一个对象(这是昂贵操作的结果)结果存储在称为“缓存”的对象文本中。代码具体做的是:
当使用参数执行myFunc时,函数首先检查缓存。如果缓存中有“param”的值,它将返回该值。如果没有,则执行昂贵的操作,然后缓存结果(使用param作为键),以便下次使用相同的param调用函数时使用缓存。您已经回答了自己的问题——作者假设昂贵的操作将其结果存储在
result
中
如您所述,否则缓存将只包含空对象。这个“昂贵的操作”填充
结果
对象,然后该对象存储在myFunc
函数的cache
属性中的param
名称下。嗯。。。我怀疑。在其他例子中,他非常善于解释代码中对练习很重要的部分发生了什么,即使为了清晰起见对它们进行了抽象。所以这个扔了我。。。但我也认为这可能超出了我的想象,值得一问。