Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个JavaScript函数如何缓存其结果?_Javascript_Caching_Hash_Memoization - Fatal编程技术网

这个JavaScript函数如何缓存其结果?

这个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]; }; //

读了几遍之后,我仍然不明白第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 = {};
除非那个看不见的“昂贵操作”正在存储回
结果
,否则我看不到任何东西被保留

结果存储在哪里


附言:我读过,这是一个类似的练习,我明白了。但是这里的代码不同。

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

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


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

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


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

这个“昂贵的操作”填充
结果
对象,然后该对象存储在
myFunc
函数的
cache
属性中的
param
名称下。嗯。。。我怀疑。在其他例子中,他非常善于解释代码中对练习很重要的部分发生了什么,即使为了清晰起见对它们进行了抽象。所以这个扔了我。。。但我也认为这可能超出了我的想象,值得一问。