'use strict'; /*@ Ox.cache Memoize a function > Ox.test.fn(10) == Ox.test.fn(10); true > Ox.test.fn(10) == Ox.test.fn.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; };