How is this JavaScript function caching its result

2019-04-10 11:00发布

After reading over it several times, I still don't understand how this example code from page 76 of Stoyan Stefanov's "JavaScript Patterns" works. I'm not a ninja yet. But to me, it reads like it's only storing an empty object:

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

Unless that unseen "expensive operation" is storing back to result, I don't see anything being retained.

Where are the results being stored?

P.S.: I've read Caching the return results of a function from John Resig's Learning Advanced JavaScript, which is a similar exercise, and I get that one. But the code is different here.

3条回答
淡お忘
2楼-- · 2019-04-10 11:50

You've answered your own question -- the author assumes that the expensive operation will store its result in result.

The cache would otherwise only contain empty objects, as you've noted.

查看更多
劳资没心,怎么记你
3楼-- · 2019-04-10 11:50

It says // expensive operation - the inference is that you implement code there which assigns variables into the result var, or sets the result var to another Object (which is the result of an expensive operation)

查看更多
可以哭但决不认输i
4楼-- · 2019-04-10 11:56

the results are being stored in the object literal called 'cache'. What the code is specifically doing is:

when myFunc gets executed with a param, the function first checks the cache. If there is a value for 'param' in the cache, it returns it. If not, you do the expensive operation, and then cache the result(with param as the key), so the next time the function is called with the same param the cache is used.

查看更多
登录 后发表回答