复习JS基础之利用闭包特性实现记忆函数

170 阅读1分钟

1. 记忆函数

思路

利用map或者对象结合闭包特性进行键值对缓存

解题方法

  1. 定义一个cache对象,用于保存需要缓存的对象
  2. 将参数进行字符串化用以做key
  3. 根据key来判断cache中是否存在当前key对应的对象,如果存在,就说明已经存在缓存对象,直接取出来返回,如果不存在就将其保存至cache对象中去

实现

/**
 * @param {Function} fn
 */
function memoize(fn) {
    let cache = new Map();
    return function(...args) {
        const key = JSON.stringify(args);
        if (!cache.has(key)) {
            cache.set(key, fn(...args));
        }
        let result = cache.get(key);
        return result;
    }
}


/** 
 * let callCount = 0;
 * const memoizedFn = memoize(function (a, b) {
 *	 callCount += 1;
 *   return a + b;
 * })
 * memoizedFn(2, 3) // 5
 * memoizedFn(2, 3) // 5
 * console.log(callCount) // 1 
 */