Leetcode #2666. 允许一次函数调用
内容提要
本文介绍了高阶函数once,该函数确保传入的函数fn最多只被调用一次。第一次调用返回fn的结果,后续调用返回undefined。适用于限制函数调用次数的场景。
延伸解读
实现机制:闭包与状态标记
once 函数通过闭包保存一个布尔变量 executed 和结果变量 result。首次调用时,executed 为 false,执行 fn 并保存结果;后续调用时,executed 为 true,直接返回 undefined。这种模式确保 fn 仅执行一次,且不依赖外部状态。
参数处理与返回值
返回的函数使用剩余参数 (...args) 接收任意数量的参数,并在首次调用时将这些参数传递给 fn。后续调用即使传入不同参数,也不会再次执行 fn,而是统一返回 undefined。这符合题目要求:后续调用不调用 fn。
应用场景与注意事项
once 适用于需要限制函数调用次数的场景,如初始化、事件处理或资源加载。但需注意,后续调用返回 undefined,可能需调用方处理该值。此外,若 fn 抛出异常,executed 仍为 true,后续调用不会重试。
Q&A
什么是高阶函数once?
高阶函数once确保传入的函数fn最多只被调用一次,第一次调用返回fn的结果,后续调用返回undefined。
once函数的返回值是什么?
once函数的返回值是一个新函数,该函数第一次调用时返回fn的结果,后续调用返回undefined。
能否给出once函数的使用示例?
例如,fn为(a,b,c) => (a + b + c),第一次调用onceFn(1, 2, 3)返回6,后续调用返回undefined。
once函数如何跟踪函数调用状态?
once函数通过一个内部变量来跟踪fn是否已经被调用,确保fn只执行一次。
once函数适用于哪些场景?
once函数适用于需要限制函数调用次数的场景,例如防止重复执行某些操作。
once函数的参数有什么限制?
once函数的参数fn必须是一个有效的函数,且调用次数限制在最多一次。