我在读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