欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  资讯频道

一个优秀的Javascript Memoizer

程序员文章站 2022-04-27 13:57:02
...

John Hann提供了一个很不错的Memoizer实现 - memoization,充分利用了closures,arity 和 recursion-JavaScript最重要的3个概念/功能。

// memoize: a general-purpose function to enable a function to use memoization
//   func: the function to be memoized
//   context: the context for the memoized function to execute within
//   Note: the function must use explicit, string-serializable parameters
function memoize (func, context) {
    function memoizeArg (argPos) {
        var cache = {};
        return function () {
            if (argPos == 0) {
                if (!(arguments[argPos] in cache)) {
                   cache[arguments[argPos]] = func.apply(context, arguments);
                }
                return cache[arguments[argPos]];
            }
            else {
                if (!(arguments[argPos] in cache)) {
                    cache[arguments[argPos]] = memoizeArg(argPos - 1);
                }
                return cache[arguments[argPos]].apply(this, arguments);
           }
        }
    }
    // JScript doesn't grok the arity property, but uses length instead
    var arity = func.arity || func.length;
    return memoizeArg(arity - 1);
}


Hann说道:memoization的概念很简洁。为什么要使用它,而不是仅仅用hand-coded缓存机制?很简单,因为它能能使这个工作变的容易。举例来说:

  • hand-coded缓存机制会混淆你的代码
  • 在JavaScript中,multi-variate缓存机制很笨重
  • 较少的代码以为着更少的错误


点击查看详情:http://unscriptable.com/index.php/2009/05/01/a-better-javascript-memoizer/

 

相关标签: JavaScript Cache