【问题标题】:How is this JavaScript function caching its results?这个 JavaScript 函数如何缓存它的结果?
【发布时间】:2011-08-30 17:30:02
【问题描述】:

读了几遍后,我仍然不明白Stoyan Stefanov's "JavaScript Patterns" 第76 页的这个示例代码是如何工作的。我还不是忍者。但对我来说,它读起来就像只存储一个空对象:

var myFunc = function (param) {
  if (!myFunc.cache[param]) {
    var result = {};
    // ... expensive operation ...
    myFunc.cache[param] = result;
  } 
  return myFunc.cache[param];
};
// cache storage
myFunc.cache = {};

除非看不见的“昂贵操作”将存储回result,否则我看不到任何保留。

结果存储在哪里?

P.S.:我读过Caching the return results of a function from John Resig's Learning Advanced JavaScript,这是一个类似的练习,我明白了。但是这里的代码不同。

【问题讨论】:

  • “昂贵的操作”是填充 result 对象,然后将其存储在 myFunc 函数的 cache 属性内的 param 名称下。

标签: javascript caching hash memoization


【解决方案1】:

它说 // 昂贵的操作 - 推断是您在那里实现代码,将变量分配给结果 var,或将结果 var 设置为另一个对象(这是昂贵操作的结果)

【讨论】:

    【解决方案2】:

    结果存储在名为“缓存”的对象字面量中。代码具体做的是:

    当 myFunc 使用参数执行时,该函数首先检查缓存。如果缓存中有 'param' 的值,则返回它。如果不是,则执行昂贵的操作,然后将结果缓存(以参数为键),因此下次使用相同的参数调用该函数时,将使用缓存。

    【讨论】:

      【解决方案3】:

      您已经回答了自己的问题——作者假设昂贵的操作会将其结果存储在result

      如您所述,否则缓存将只包含空对象。

      【讨论】:

      • 嗯...我怀疑。在其他示例中,他非常擅长解释对练习很重要的部分代码中发生的情况,即使为了清晰起见,它们被抽象出来。所以这个把我扔了......但我也认为它可能已经超出了我的头脑,值得一问。
      猜你喜欢
      • 2010-11-13
      • 2019-09-01
      • 2011-01-18
      • 2011-01-14
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      相关资源
      最近更新 更多