30 lines
744 B
JavaScript
30 lines
744 B
JavaScript
'use strict';
|
|
/*@
|
|
Ox.cache <f> Memoize a function
|
|
<script>
|
|
var f = Ox.cache(function(n) { return n * Math.random(); });
|
|
</script>
|
|
> f(10) == f(10);
|
|
true
|
|
> f(10) == f.clear()(10);
|
|
false
|
|
@*/
|
|
Ox.cache = function(fn) {
|
|
var cache = {},
|
|
ret = function() {
|
|
var key = JSON.stringify(Ox.makeArray(arguments));
|
|
return key in cache ? cache[key]
|
|
: (cache[key] = fn.apply(this, arguments));
|
|
};
|
|
ret.clear = function() {
|
|
if (arguments.length == 0) {
|
|
cache = {};
|
|
} else {
|
|
Ox.toArray(arguments).forEach(function(key) {
|
|
delete cache[key];
|
|
});
|
|
}
|
|
return ret;
|
|
}
|
|
return ret;
|
|
};
|