一个优秀的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/
上一篇: 大型互联网应用的技术选型和决策,10条成功与失败的记录
下一篇: JavaScript重构(汇总帖)