以下为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中。如果calledtrue,则直接返回缓存的结果result

这样,在第一次调用返回的函数时,会执行一次原函数,结果会保存在result中。随后再次调用返回的函数时,由于called已经为true,函数不会再次执行,直接返回缓存的结果。

测试代码与预期输出如下:

function func(num) {  return num}const onced = once(func)console.log(onced(1)) // 输出:1console.log(onced(2))// 输出:1,因为已经调用过了,前一次的结果被直接返回