有人可以提供一个简单的功能与记忆只使用Javascript。在谷歌搜索时,我在网上找到了一些文章,但我没有在上面看到多少。我找到的最好的一篇文章是:
http://alivedise.github.io/blog/2012/12/22/javascript-memorization/
我理解缓存是什么,但是,这个例子对我来说太复杂了。我希望在座的任何人都能提供一个简单的函数和调用,这样我就可以理解它,并开始更深入地理解它。
谢谢
发布于 2013-11-20 18:19:08
我觉得你想要的是回忆录。
来自维基百科
回忆法是一种优化技术,主要用于通过函数调用来加速计算机程序,避免重复计算以前处理过的输入的结果。
有一篇很好的文章这里和另一篇,所以质疑这里。
您通常会使用回忆录来降低重复计算结果的成本,结果总是一样的。任何性能改进都是以牺牲为缓存结果分配内存为代价的。
代码中的一个简单示例:
var cachedResult;
function doHeavyCalculation()
{
if (typeof(cachedResult) !== 'undefined')
return cachedResult;
// no cached result available. calculate it, and store it.
cachedResult = /* do your computation */;
return cachedResult;
}有一些JavaScript框架支持回溯任何函数,它们基本上通过装饰一个函数,以可重用的方式为您提供这个样板代码。
发布于 2013-11-20 18:24:59
我认为你的意思是回忆录,这基本上意味着记住你已经计算过的内容。下面是使用回忆录的Fibonacci算法。
var cache = {1:1, 2:1};
function fib(n) {
if(!cache[n]) // Have we already calculated this value?
cache[n] = fib(n - 1) + fib(n - 2) // Calculate and store it
return cache[n]
}发布于 2019-07-17 22:40:30
恐怕所有其他答案都使用全局变量,这是错误的。JavaScript提供了更好的解决方案。请注意函数表达式后面的括号()。这意味着函数将立即触发,函数返回的结果(并分配给备注常量)是另一个函数,它使计算本身,但它可以使用缓存作为一个变量从已经启动的函数的上下文。缓存仅可由备忘录函数访问。
const memo = function () {
let cache = [];
return function (n) {
if (cache.includes(n)) { console.log("already in memory") }
else { console.log("first"); cache.push(n); }
}
}();
memo(7) //first
memo(7) //already in memory
memo(7) //already in memory
memo(1) //first
memo(1) //already in memoryhttps://stackoverflow.com/questions/20103739
复制相似问题