Leetcode #2666. 允许一次函数调用

💡 原文英文,约400词,阅读约需2分钟。
📝

内容提要

本文介绍了高阶函数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必须是一个有效的函数,且调用次数限制在最多一次。

🏷️

标签

➡️

继续阅读