/** ***************************************** * Created by edonet@163.com * Created on 2021-03-21 15:30:59 ***************************************** */ 'use strict'; /** ***************************************** * 加载依赖 ***************************************** */ import { F, O } from './d'; import { equal } from './equal'; /** ***************************************** * 记忆函数 ***************************************** */ export function memory(handler: T): T { const ctx = {} as { args: unknown[], value: unknown }; // 校验参数 if (typeof handler !== 'function') { throw new Error('expect `handler` to be a function!'); } // 生成记忆函数 function memoried(this: O, ...args: unknown[]): unknown { if (!equal(args, ctx.args)) { ctx.args = args; ctx.value = handler.apply(this, args); } // 返回结果 return ctx.value; } // 返回函数 return memoried as unknown as T; }