这是不是JavaScript优化?

这是不是JavaScript优化?,javascript,v8,spidermonkey,chakra,Javascript,V8,Spidermonkey,Chakra,有人能给我解释一下下面这两个函数之间的区别吗 我想知道JavaScript引擎是否在这里进行了某种纳米级优化 函数withoutVar(){ 返回“stackoverflow”; } 函数withVar(){ var结果='stackoverflow'; 返回结果; } var a=不带var(); var b=withVar(); 不同之处在于,您的函数with var使实现分别访问底层激活对象。所以从技术上讲,这个函数会运行得慢一些,但我们甚至没有讨论微观优化,更像是纳米优化 某些浏览器可能

有人能给我解释一下下面这两个函数之间的区别吗

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

函数withoutVar(){
返回“stackoverflow”;
}
函数withVar(){
var结果='stackoverflow';
返回结果;
}
var a=不带var();
var b=withVar();

不同之处在于,您的函数
with var
使实现分别访问底层激活对象。所以从技术上讲,这个函数会运行得慢一些,但我们甚至没有讨论微观优化,更像是纳米优化

某些浏览器可能确实会将该代码优化为
withVar
的直接
return
语句。Webkit或至少是配备V8引擎的Chrome都是很好的选择。无论哪种方式,这都是微不足道的,您不应该在这里担心运行时性能

在我的机器(Chrome)上的差异约为
0.32%
7.000.000次呼叫



我想在这样的东西上买的唯一的论点是,前者的功能用较少的字符。通过这种方式,您可以优化文件大小并减少网络流量(但即使如此,在它真正发挥作用之前,我们必须在许多实例上优化此类语句)

某些引擎可能会执行此类优化。政府当然会这样做:

function withVar(){return"stackoverflow"}var a=withVar();
速度几乎没有差别,但“优化”版本更短(因此客户端下载更快)。以下是研究结果:


您可以看到“扁平”版本(没有变量声明)稍微快一点(但看看每秒的运算量——这是一个优化,在速度方面甚至不值得考虑)。

我认为没有真正的区别,变量get在返回后被清除,它实际上对执行速度没有影响。您只是在保存一个不必要的变量。两者都做相同的事情。没有引入关闭。没有“丢失的参考资料”。您只是在代码中添加了几个字符,仅此而已。您使用了哪个基准测试,James?@FrançoisB。-我不知道你的意思。我已经在答案中链接到了上的测试用例。我正在寻找jsperf。谢谢;)至少在v8中,您正在以禁用优化的方式运行jsperf。请参见此处-比预期速度快2倍以上,速度相等。