Skip to content

Latest commit

 

History

History
35 lines (24 loc) · 1.16 KB

仅执行一次函数.md

File metadata and controls

35 lines (24 loc) · 1.16 KB

仅执行一次函数

仅执行一次函数的话,使用类似 Lodash 库的 _.once(func) 方法是最简单的。

但如果你不想使用库,想要自己实现一个简单的话,可以利用闭包:

const once = (fn) => {
  let result

  return function () {
    if (fn) {
      result = fn.apply(this, arguments)
      fn = null
    }

    return result
  }
}

let n = 0
const initialize = once(() => ++n)

initialize() // n = 1
initialize() // n = 1
initialize() // n = 1

当你将函数作为参数传递给此 once 方法(作为参数 fn)时,它将返回一个只能调用一次的函数。

简而言之,它通过创建一个 result 变量并将调用函数的结果与其提供的参数赋值给该变量来完成这一功能,但这只是在函数第一次运行时。在后续调用函数时,它将永远不会执行 if 语句(因为 fn 变量在第一次调用时设置为 null),并且将返回 result 变量引用的值(在第一次调用期间设置并通过闭包访问)。

更多资料

JavaScript 专题之惰性函数