为什么每次调用函数时都不会重置变量

Mar*_*ski 2 javascript 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
Run Code Online (Sandbox Code Playgroud)

我的一个理论是,由于memoize是一个全局变量,因此每次调用缓存变量时都不会重置缓存变量.但我似乎无法找到一个好的解决方案.

Spe*_*rek 5

因为该函数memoize只被调用一次.memoize(function(x){ return x*x; })简单地给出返回值,这恰好是一个函数.