【淘宝】实现一个 once 函数,记忆返回结果只执行一次

561次阅读  |  发布于3年以前

简单实现如下:

function once (f) {
  let result
  let revoked = false

  return (...args) => {
    if (revoked) return result
    const r = f(...args)
    revoked = true
    result = r
    return r
  }
}
> const f = () => {console.log('call'); return 3;}
< undefined

> once_f = once(f)
< (...args) => {
    if (revoked) return result
    const r = f(...args)
    revoked = true
    result = r
  }

// 第一次调用
> once_f()
< call
< 3

// 第二次调用,没有打印 call
> once_f()
< 3

更多面试

【字节-视频架构组-前端】头条架构组招人了内含自测题【美团】什么是防抖和节流,他们的应用场景有哪些【美团】如何获取一个进程的内存并监控

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8