一个简化的例子:

function shorten(string) {
  return string.slice(0, 3);
}

const today = "Friday";
if (shorten(today) === "Fri") {
  console.log("Oh yeah it's " + shorten(today));
}


shorten(today)在这里被两次叫过,这让我很难过。我相信我们每天都会遇到这种情况,我们要做的是先将shorten(today)的值存储在变量中,然后使用该变量两次。

我的问题是:现代JS引擎是否足够聪明,以至于我实际上不必为此担心?

最佳答案

如果多次运行shorten,则V8引擎将具有JIT编译器,该编译器将优化该代码段,以便下次运行速度更快。


  当它第二次遇到相同的函数调用时,也许它能够意识到它进行了相同的计算,并且仍然将结果存储在内存中


您所描述的称为备忘录,而V8则不这样做。但是,那里有可以使用的库(例如fast-memoize)。

但是最好的选择还是将计算结果存储在变量中并引用它。

关于javascript - 当我连续执行两次简单的JS函数时,它的计算能力是否会增加一倍?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54601304/

10-11 12:08