美文网首页
手写一个记忆化函数

手写一个记忆化函数

作者: BitterOutsider | 来源:发表于2020-03-01 23:07 被阅读0次

    基本需求

    若某一函数已经执行过一次,则再次执行时无需运行,可直接拿到结果。
    这里实现一个单参数的简单形式。
    效果如下:

    const fn = memo((x) => {
        console.log('执行了一次')
        return x * 2
    })
    fn(1) // 执行了一次 2
    fn(1) // 2
    fn(1) // 2
    fn(2) // 执行了一次 4
    

    实现

    分析:fn 还能执行,说明 memo 返回的是一个函数,且传入的参数用于执行函数。我们可以在 memoed 中创建一个对象来存储传入的参数并对比此参数以前是否传入过。

    const memo = function(){
      const memoed = function(param){
        if(!(param in memoed.cache)){
          memoed.cache[param] = fn.apply(this, arguments)
        }
        return memoed.cache[param]
      }
      memoed.cache = {}
      return memoed
    }
    

    相关文章

      网友评论

          本文标题:手写一个记忆化函数

          本文链接:https://www.haomeiwen.com/subject/eitdkhtx.html