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