memoize.js 933 B

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