前端面试题:手写一个记忆函数

108 阅读1分钟

什么是记忆函数

记忆函数就是可以将函数的计算结果缓存在某个对象中,下次调用时,如果参数相同,则直接从缓存中取数据,从而避免无谓的重复运算

function sum(a, b) {
  return a + b
}
function memoize(fn) {
  // TODO 实现记忆函数
}
const memoizeSum = memoize(sum)

const res = memoizeSum(1, 2)
const res1 = memoizeSum(1, 2) // 参数,第二次调用时,直接从缓存中取出数据,不用重新计算一次

实现记忆函数

  1. 实现memoize,此时还没有记忆功能
function memoize(fn) {
  return function(...args) {
    return fn(...args)
  }
}
  1. 如何判断输入参数一致呢?

使用JSON.stringify把参数包裹,作为键值。缓存对象为Map

function memoize(fn) {
  const _cache = new Map()
  return function(...args) {
    const key = JSON.stringify([...args])
    if (_cache.has(key)) {
      return _cache.get(key)
    }
    const result = fn(...args)
    _cache.set(key, result)
    return result
  }
}

现在一个基础版的记忆函数功能就算实现了。