【发布时间】:2019-06-01 20:40:58
【问题描述】:
我想编写一个函数once,它接受一个回调作为输入并返回一个函数。第一次调用返回的函数时,它应该调用回调并返回该输出。如果再次调用它,它不会再次调用回调,而是简单地返回第一次调用时的输出值。
以下是我尝试做的。但我没有得到预期的结果。我需要理解这个概念。
function once(func) {
let num;
function retFunc(x){
num = func(x);
return num;
}
return retFunc;
}
function addByTwo(input){
return input + 2;
}
var onceFunc = once(addByTwo);
console.log(onceFunc(4)); //should log 6
console.log(onceFunc(10)); //should log 6
console.log(onceFunc(9001)); //should log 6
【问题讨论】:
-
num已经是很好的第一步,但你怎么记得它已经被称为第一次了?你总是覆盖num = func(x) -
仅供参考,这称为memoization