4

在阅读了几次之后,我仍然不明白这个来自Stoyan Stefanov 的“JavaScript 模式”第 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,否则我看不到任何保留。

结果存储在哪里?

PS:我已经阅读了 John Resig 的 Learning Advanced JavaScript 中的 Caching the return results of a function,这是一个类似的练习,我得到了那个。但是这里的代码不同。

4

3 回答 3

5

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

正如您所指出的,否则缓存将只包含空对象。

于 2011-05-22T20:02:09.650 回答
2

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

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

于 2011-05-22T20:02:03.433 回答
1

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

于 2011-05-22T20:01:46.280 回答