ut2
Version:
一个现代 JavaScript 实用工具库。[点击查看在线文档]。
51 lines (50 loc) • 1.77 kB
TypeScript
type EqualFn<TFunc extends (...args: any[]) => any> = (newArgs: Parameters<TFunc>, lastArgs: Parameters<TFunc>) => boolean;
/**
* 创建一个缓存 `func` 结果的函数。
*
* 如果上下文和参数一致,直接返回缓存结果,否则执行函数并缓存。
*
* 返回的函数含有一个 `clear` 方法,用于清除缓存。
*
* @alias module:Function.memoize
* @since 1.17.0
* @param {Function} func 要缓存结果的函数。
* @param {Object} [options] 配置项。
* @param {Function} [options.isEqual] 自定义比较参数方法。默认函数 `shallowEqual`。
* @param {number} [options.max] 最大缓存数量,`0`表示不限制。默认`0`。
* @returns 缓存 `func` 结果的函数。
* @example
* const memoizedValues = memoize(Object.values);
* const object = { a: 1, b: 2 };
* const other = { a: 3, b: 4 };
*
* memoizedValues(object); // [1, 2]
* memoizedValues(other); // [3, 4]
*
* object.a = 2;
* memoizedValues(object); // [1, 2]
*
* // 清空缓存
* memoizedValues.clear();
*
* memoizedValues(object); // [2, 2]
*
* // 限制缓存数量。如限制缓存数量为1时,效果同 memoize-one 。
* const memoizedOneValues = memoize(Object.values, { max: 1 });
*
* // 自定义比较函数。如深比较。
* import { isEqual } from 'ut2'
* const deepMemoizedValues = memoize(Object.values, { isEqual });
* const result1 = deepMemoizedValues({ a: 1 });
* const result2 = deepMemoizedValues({ a: 1 });
* console.log(result1 === result2); // true
*
*/
declare function memoize<TFunc extends (...args: any[]) => any>(func: TFunc, options?: {
isEqual?: EqualFn<TFunc>;
max?: number;
}): {
(this: any, ...newArgs: Parameters<TFunc>): any;
clear(): void;
};
export default memoize;