为什么我无法从JavaScript闭包中返回结果?

时间:2015-11-04 17:30:04

标签: javascript return closures underscore.js memoization

我希望函数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"

0 个答案:

没有答案