首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript记忆

Javascript记忆
EN

Stack Overflow用户
提问于 2013-11-20 18:15:43
回答 4查看 7.3K关注 0票数 3

有人可以提供一个简单的功能与记忆只使用Javascript。在谷歌搜索时,我在网上找到了一些文章,但我没有在上面看到多少。我找到的最好的一篇文章是:

http://alivedise.github.io/blog/2012/12/22/javascript-memorization/

我理解缓存是什么,但是,这个例子对我来说太复杂了。我希望在座的任何人都能提供一个简单的函数和调用,这样我就可以理解它,并开始更深入地理解它。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-20 18:19:08

我觉得你想要的是回忆录。

来自维基百科

回忆法是一种优化技术,主要用于通过函数调用来加速计算机程序,避免重复计算以前处理过的输入的结果。

有一篇很好的文章这里和另一篇,所以质疑这里

您通常会使用回忆录来降低重复计算结果的成本,结果总是一样的。任何性能改进都是以牺牲为缓存结果分配内存为代价的。

代码中的一个简单示例:

代码语言:javascript
复制
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框架支持回溯任何函数,它们基本上通过装饰一个函数,以可重用的方式为您提供这个样板代码。

票数 9
EN

Stack Overflow用户

发布于 2013-11-20 18:24:59

我认为你的意思是回忆录,这基本上意味着记住你已经计算过的内容。下面是使用回忆录的Fibonacci算法。

代码语言:javascript
复制
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]
}
票数 5
EN

Stack Overflow用户

发布于 2019-07-17 22:40:30

恐怕所有其他答案都使用全局变量,这是错误的。JavaScript提供了更好的解决方案。请注意函数表达式后面的括号()。这意味着函数将立即触发,函数返回的结果(并分配给备注常量)是另一个函数,它使计算本身,但它可以使用缓存作为一个变量从已经启动的函数的上下文。缓存仅可由备忘录函数访问。

代码语言: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 memory
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20103739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档