好的,所以我的问题非常具体,因为我不只是随机学习JavaScript。我正在努力学习一门课程,所以我正在学习闭幕课程,而且我正在完成这项练习。我已经尝试过用几种方法编写代码,但是我仍然在指令的最后一位失败,指定只调用一次,就好像结果是25并且再次调用它,它看到它已经被5调用了一次,并且只剩下25。但是我被困住了。
以下是练习:
function cacheFunction(cb) {
// use closure to create a cache for the cb function
// the function that you return should accept a single argument and invoke cb with that argument
// when the function you return is invoked with an argument it should save that argument and its result
// when the function you return is called again with an argument that it has seen before it should not call cb
// but should instead directly returned the previous result
// example:
// cb -> function(x) { return x * x; }
// if the function you return is invoked with 5 it would pass 5 to cb(5) and return 25
// if the function you return is invoked again with 5 it will look on an object in the closure scope
// and return 25 directly and will not invoke cb again
--Code here
}
现在这就是我所拥有的,而且它不起作用..
function cacheFunction(cb) {
return function (number) {
number + number;
return cb(number);
}
}
我知道还有更多内容和我写它的方式,这是不对的,但我还是新手,任何帮助都会受到赞赏。 :)
哦,我对它的JS测试说:
cacheFunction(CB) √应该返回回调函数(1ms) √应该在调用缓存函数时返回回调函数结果(1ms) ×应缓存功能结果(4ms)
●cacheFunction(cb)>应该缓存函数结果
expect(jest.fn()).toHaveBeenCalledTimes(2)
Expected mock function to have been called two times, but it was called nine times.
46 | cachedFunction(10);
47 | cachedFunction(10);
> 48 | expect(cb).toHaveBeenCalledTimes(2);
49 | });
50 | });
51 |
为什么要拨打9次?
答案 0 :(得分:0)
根据运动要求,您需要memoization。在您的情况下简单定义:如果您已经使用相同的数字调用了缓存函数,请不要调用cb函数。我可以给你一个答案,但它不会帮助你学习JS。所以我会提供简单的提示。
number + number
。关于为什么九次,我希望你明白,如果你缓存的函数会用相同的参数调用九次。它只需要调用一次cb函数