我希望函数foo()能够关闭它作为参数所使用的函数 . 然后当使用bar()从闭包内部调用该函数时,我想在返回之前将结果存储在缓存中 . 然后下一次调用bar()我想检查缓存中的答案,然后返回(如果可能的话)而不是评估整个函数 . (与memoize相似 . )

我写了一些我认为应该有用的东西,但由于某种原因,第一次调用bar()时它不会返回结果 . 它可以将其记录到控制台,但不能将其返回 . 为什么第一次调用bar()不会返回“baz”?

在此先感谢您的帮助 . 我是编程新手,仍然试图理解闭包 . 我已经阅读了各种解释它们的文章,但没有看到任何看起来像解释这个怪癖的东西 .

foo = function(func) {
  var cache = [];
  var called = false;
  return function(){

    if(!called){
      called = true;
      var answer = func.apply(this, arguments);
      cache.push({arguments : answer});
      console.log("answer = " + answer);
      return answer;

    } else {
        console.log("retrieving answer from history");
        return cache[0].arguments;
    }

  };
};

var bar = foo(function(){ return "baz";});

bar();  //logs "answer = baz" to the console, returns nothing
bar();  //logs "retrieving answer from history", returns "baz"