以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - JavaScript 代码题
46. 实现`_.once()`
可以自己实现一个once()
函数,使用闭包来缓存结果并实现只调用一次的功能。具体实现如下:
function once(func) { let called = false let result return function(...args) { if (!called) { called = true result = func.apply(this, args) } return result }}
在这个实现中,called
用于标记原函数是否已被调用过,result
用于缓存调用结果。返回的函数(闭包)首先检查called
的值,如果为false
则调用原函数,并将called
设为true
,将结果保存在result
中。如果called
为true
,则直接返回缓存的结果result
。
这样,在第一次调用返回的函数时,会执行一次原函数,结果会保存在result
中。随后再次调用返回的函数时,由于called
已经为true
,函数不会再次执行,直接返回缓存的结果。
测试代码与预期输出如下:
function func(num) { return num}const onced = once(func)console.log(onced(1)) // 输出:1console.log(onced(2))// 输出:1,因为已经调用过了,前一次的结果被直接返回