有人可以解释一下下面这两个函数之间有什么区别吗?
我想知道JavaScript引擎是否在这里进行某种纳米优化。
function withoutVar() {
return 'stackoverflow';
}
function withVar() {
var result = 'stackoverflow';
return result;
}
var a = withoutVar();
var b = withVar();
答案 0 :(得分:7)
某些引擎可能会执行此类优化。 Google Closure compiler肯定会这样做:
function withVar(){return"stackoverflow"}var a=withVar();
速度几乎没有差异,但“优化”版本更短(因此客户端下载速度更快)。以下是a benchmark的结果:
你可以看到“平面”版本(没有变量声明)稍微快一些(但是看看每秒的操作 - 这是一个在速度方面甚至不值得考虑的优化)。
答案 1 :(得分:4)
不同之处在于,您的函数withVar
会导致实现分别访问底层激活对象 词汇环境记录。从技术上讲,这个函数运行速度会慢一些,但我们甚至不讨论微优化,更像是 nano optimizations 。
某些浏览器可能确实将该代码优化为return
的直接withVar
语句。 Webkit 或至少 Chrome 及其 V8引擎是很好的选择。无论哪种方式,这都是微不足道的,你不应该关注这里的运行时性能。
我的机器(Chrome)差异约为0.32%
,约为7.000.000次。
我会考虑购买这样的东西的唯一论据是,前一个函数适用于较少的字符。通过这种方式,您可以优化文件大小并减少线路上的流量(但即使这样,我们也必须在许多实例上优化这些语句才能真正发挥作用)