仅执行一次函数的话,使用类似 Lodash 库的 _.once(func)
方法是最简单的。
但如果你不想使用库,想要自己实现一个简单的话,可以利用闭包:
const once = (fn) => {
let result
return function () {
if (fn) {
result = func.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
变量引用的值(在第一次调用期间设置并通过闭包访问)。
网友评论