我在讀Professor Frisby's Mostly adequate guide to functional programming,我遇到了下面顯示的代碼示例。我不明白爲什麼每次調用squareNumber時緩存都不會重置爲{}。爲什麼變量在每次調用函數時都沒有被重置
var memoize = function(f){
var cache = {}; // why is this not reset each time squareNumber is called?
return function() {
var arg_str = JSON.stringify(arguments);
cache[arg_str] = cache[arg_str]|| f.apply(f, arguments);
return cache[arg_str];
};
}
var squareNumber = memoize(function(x){ return x*x; });
squareNumber(4);
//=> 16
squareNumber(4); // returns cache for input 4
//=> 16
squareNumber(5);
//=> 25
squareNumber(5); // returns cache for input 5
//=> 25
有一種說法我是因爲memoize的是一個全局變量的緩存變量不會被重置每次調用時間。但我似乎無法找到一個好的解決方案。
你爲什麼認爲它*會被重置? 'memoize'返回的函數並不會改變'cache'的值,那麼會改變它呢? – Pointy