2

有人可以解释一下下面这两个功能之间的区别吗?

我想知道 JavaScript 引擎是否在这里进行了某种纳米优化。

function withoutVar() {                                                                                                                   
  return 'stackoverflow';                                                                                                                    
}
function withVar() {
  var result = 'stackoverflow';
  return result;
}
var a = withoutVar();
var b = withVar();  
4

2 回答 2

7

一些引擎可能会执行这样的优化。Google Closure 编译器当然会这样做:

function withVar(){return"stackoverflow"}var a=withVar();

速度几乎没有差异,但“优化”版本更短(因此客户端下载速度更快)。这是基准测试的结果:

在此处输入图像描述

您可以看到“平面”版本(没有变量声明)稍微快一些(但看看每秒的操作数 - 这是一个甚至不值得考虑速度的优化)。

于 2012-11-06T13:22:22.637 回答
4

不同之处在于您的函数导致实现分别withVar访问底层激活对象Lexical Environment Record。所以从技术上讲,这个函数会运行得更慢,但我们甚至不是在谈论微优化,更像是纳米优化

某些浏览器可能确实将该代码优化returnwithVar. Webkit或至少带有V8 引擎的Chrome是很好的候选者。无论哪种方式,这都是微不足道的,您不应该在这里关心运行时性能。

JSPerf 基准测试

我的机器(Chrome)上的差异约为0.32%7.000.000 次调用。


我会考虑购买这样的东西的唯一论点是,前一个函数可以使用更少的字符。这样,您可以优化文件大小并减少网络上的流量(但即便如此,我们也必须在许多实例上优化此类语句,然后才能真正发挥作用)

于 2012-11-06T13:22:07.673 回答