# 实现一个 once 函数,记忆返回结果只执行一次

Issue

欢迎在 Issue 中交流与讨论: Issue 406

Author

回答者: shfshanyue

简单实现如下:

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

扫码关注公众号全栈成长之路,并发送

即可在关注期间无限制浏览本站全部文章内容

你也可以在文章关于回复公众号扫码解锁全站的技术实现中获得解锁代码,永久解锁本站全部文章