memoize.js 1.0 KB

123456789101112131415161718192021222324252627282930313233
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. var is_function_1 = require("./is-function");
  4. /**
  5. * _.memoize(calColor);
  6. * _.memoize(calColor, (...args) => args[0]);
  7. * @param f
  8. * @param resolver
  9. */
  10. exports.default = (function (f, resolver) {
  11. if (!is_function_1.default(f)) {
  12. throw new TypeError('Expected a function');
  13. }
  14. var memoized = function () {
  15. var args = [];
  16. for (var _i = 0; _i < arguments.length; _i++) {
  17. args[_i] = arguments[_i];
  18. }
  19. // 使用方法构造 key,如果不存在 resolver,则直接取第一个参数作为 key
  20. var key = resolver ? resolver.apply(this, args) : args[0];
  21. var cache = memoized.cache;
  22. if (cache.has(key)) {
  23. return cache.get(key);
  24. }
  25. var result = f.apply(this, args);
  26. // 缓存起来
  27. cache.set(key, result);
  28. return result;
  29. };
  30. memoized.cache = new Map();
  31. return memoized;
  32. });
  33. //# sourceMappingURL=memoize.js.map