javascript中的记忆和缓存函数执行是否相同?

javascript中的记忆和缓存函数执行是否相同?,javascript,memoization,Javascript,Memoization,我最近接受了一次采访,有人问我,如何缓存任何函数的执行?我只听说过Javascript中的函数缓存 我查过了,但没有从中得到任何想法。记忆和缓存函数的执行是相同的还是不同的 我知道Javascript中的函数缓存称为memonization,它不仅缓存结果,而且缓存函数执行情况如何 是的,通常是一样的 有多种方法可以实现它,但思想是一样的——避免对函数进行额外的计算。它也是语言不可知论的东西 功能应满足的一个条件是纯度,例如无副作用和参考透明度-相同的输入产生相同的输出。这不是函数式编程,但在F

我最近接受了一次采访,有人问我,如何缓存任何函数的执行?我只听说过Javascript中的函数缓存

我查过了,但没有从中得到任何想法。记忆和缓存函数的执行是相同的还是不同的


我知道Javascript中的函数缓存称为memonization,它不仅缓存结果,而且缓存函数执行情况如何

是的,通常是一样的

有多种方法可以实现它,但思想是一样的——避免对函数进行额外的计算。它也是语言不可知论的东西

功能应满足的一个条件是纯度,例如无副作用和参考透明度-相同的输入产生相同的输出。这不是函数式编程,但在FP中,函数大部分时间都是纯函数

因此,如果函数是纯函数,那么如果我们不执行函数体而立即返回缓存的值,则被调用方不会注意到任何差异。 换句话说,如果函数是纯函数,那么记忆和所谓的缓存函数执行之间就没有真正的区别,因为返回值是相同的

如果函数不是纯函数呢


显然,在这种情况下,如果我们跳过函数体并立即返回一个缓存值,我们将错过函数的副作用。优化这样的函数会使我们将纯物质和不纯物质分开,现在我们知道如何处理第一个:

这仍然是记忆,在优化策略方面,两者在缓存数据方面没有区别,但在使用方式上没有区别

通常的记忆将记住缓存昂贵函数调用中使用的结果,并在相同的输入再次出现时返回缓存结果


缓存函数执行通过存储在内存中使用相同的概念,但这次存储的是函数体本身,而不是结果。

你是在谈论记忆化吗?也许你读到的内容和面试官谈论的内容实际上是一样的,但是,由于你们都不知道这个备忘录的正确术语,你们感到困惑了吗?对我来说,缓存执行似乎与js的JIT优化策略有关;几乎可以肯定那不是他们问你的。我想他们也在谈论回忆录。那是回忆录,现在仍然是回忆录。您所指的缓存函数执行仍然使用相同的记忆化概念,不同之处在于您有一个可以重用的工厂函数。基本上是缓存装饰器。您不会像示例17中那样直接在主函数中添加缓存,但是,通过组合,您可以向函数中添加备忘录。原始函数根本不知道记忆,@NullPointer。例如,您可以有一个不带缓存的普通斐波那契函数,以及一个带缓存的常量斐波那契WithCaching=cacheFnfibonacci。