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

手写一个记忆化函数

作者: 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
}

相关文章

  • 手写一个记忆化函数

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

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • 前端手写

    节流 防抖 用xhr手写axios 函数柯里化 手写promise 手写reduce new 深拷贝 string...

  • 手写lodash中flowRight,curry,memoize

    手写flowRight 手写curry函数 手写memoize函数

  • 面试秘籍之手写系列

    一、手写call函数 二、手写bind函数 三、手写实现new功能的函数 四、手写reduce函数 五、手写防抖函...

  • 手写代码系列(持续更新)

    1、手写instanceOf的实现原理 2、手写节流和防抖函数 2.1 节流函数 节流函数原理:规定在一个单位时间...

  • 前端---请你手写一个XXX吧

    目录 手写 call、apply、bind函数 手写去抖和节流两个通用函数

  • 组件化

    回忆 首先,render函数中手写h=>h(app),new Vue()实例初始化init()和原来一样。$mou...

  • 深入JavaScript Day33 - 序列化实现深拷贝的缺点

    一、序列化实现深拷贝的缺点、手写深拷贝 1、借助序列化实现深拷贝,有哪些缺点? ①不能拷贝函数 ②不能拷贝Symb...

  • Sqrt函数可视化实现

    练习:Sqrt函数可视化实现 本次练习主要是熟练numpy和matplotlib的使用,通过手写Sqrt的实现,通...

网友评论

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

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