gpt4 book ai didi

JavaScript:创建接受回调作为输入并返回函数的函数;输出取决于调用计数

转载 作者:行者123 更新时间:2023-12-02 23:30:13 24 4
gpt4 key购买 nike

我的代码的目标是:

“一次”编写一个函数,该函数接受回调作为输入并返回一个函数。当第一次调用返回的函数时,它应该调用回调并返回该输出。如果多次调用它,它不会再次调用回调,而是简单地返回第一次调用时的输出值。

我尝试了下面的代码:

const once = (inputFunc) => {

let invCount = 0;
let firstCallOutput;

return function (num) {
invCount ++;

if (invCount === 1){

firstCallOuput = inputFunc(num);
return inputFunc(num);
}

else {
return firstCallOuput;
}
}
}

const addByTwoOnce = once(function(num) {
return num + 2;
});


// UNCOMMENT THESE TO TEST YOUR WORK!
console.log(addByTwoOnce(5)); //should log 7
console.log(addByTwoOnce(10)); //should log 7
console.log(addByTwoOnce(9001)); //should log 7

我的代码控制台在所有三种情况下都会输出正确的值 (7)。但它未通过 2/3 的测试规范。

enter image description here

我做错了什么?如何才能通过这两项测试规范?

最佳答案

这是一个简化的 once 函数 -

const once = (f, memo) => x =>
memo === undefined
? (memo = f(x), memo)
: memo

const addTwo = x =>
x + 2

const addTwoOnce =
once(addTwo)

console.log(addTwoOnce(5)) //should log 7
console.log(addTwoOnce(10)) //should log 7
console.log(addTwoOnce(9001)) //should log 7

如果您想保护调用站点无法设置备忘录,您可以将备忘录设置为局部变量而不是参数 -

const once = f =>
{ let memo
return x =>
memo === undefined
? (memo = f(x), memo)
: memo
}

或者您可能想防止用户提供的函数返回undefined。这些都是您可以做出的选择,对代码语义结构的影响最小 -

const once = f =>
{ let hasRun = false
let memo
return x =>
hasRun
? memo
: (hasRun = true, memo = f(x), memo)
}
<小时/>

相关:constant 将返回一个常量值,无论其输入如何 -

const constant = x => _ =>
x

const always7 =
constant(7)

console.log(always7(5)) //should log 7
console.log(always7(10)) //should log 7
console.log(always7(9001)) //should log 7

<小时/>

相关:memoise将为每个唯一输入缓存一个值,仅在之前未见过该输入时重新计算f -

const memoise = (f, memo = new Map) => x =>
memo.has(x)
? memo.get(x)
: (memo.set(x, f(x)), memo.get(x))

let fib = n =>
n < 2
? n
: fib (n - 1) + fib (n - 2)

console.time("original")
console.log(fib(40))
console.timeEnd("original")
// 1503.43 ms

fib = memoise(fib)

console.time("memoised")
console.log(fib(40))
console.timeEnd("memoised")
// 0.175 ms

关于JavaScript:创建接受回调作为输入并返回函数的函数;输出取决于调用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com