import isFunction from './is-function'; /** * _.memoize(calColor); * _.memoize(calColor, (...args) => args[0]); * @param f * @param resolver */ export default (f: Function, resolver?: (...args: any[]) => string) => { if (!isFunction(f)) { throw new TypeError('Expected a function') } const memoized = function(...args) { // 使用方法构造 key,如果不存在 resolver,则直接取第一个参数作为 key const key = resolver ? resolver.apply(this, args) : args[0]; const cache = memoized.cache; if (cache.has(key)) { return cache.get(key) } const result = f.apply(this, args); // 缓存起来 cache.set(key, result); return result }; memoized.cache = new Map(); return memoized }