【发布时间】:2011-03-25 14:35:49
【问题描述】:
黑白函数声明和函数表达式的区别在var functionName = function() {} vs function functionName() {}中有很好的描述
这里提到了函数声明在解析时被评估,&函数表达式在执行阶段被评估
bytes.com 中提到函数声明比函数表达式快。
我为此创建了一个基本测试用例:http://jsperf.com/function-declaration-vs-function-expression
函数声明:
function myfunc() {
alert("yo");
}
myfunc();
函数表达式:
var myfunc = function() {
alert("yo");
}
myfunc();
测试表明函数表达式比函数声明慢90%。
为什么会有这样的速度差异?
编辑:
来自http://jsperf.com/function-declaration-vs-function-expression中的结果
在Chrome, IE9, Opera & Safari -> 函数声明比函数表达式快
在Firefox, IE7, IE8 -> 函数表达式比函数声明更快
在 IE9 中函数声明更快,而在 IE 7 & 8 中函数表达式更快。 是因为 IE9 中 JavaScript 引擎的变化,还是故意的?
【问题讨论】:
-
您使用的是什么浏览器或javascript引擎?
-
它在 Firefox 中实际上更快。
-
这些结果非常有趣,虽然它在 Chrome 和 Opera 中慢了 90%,但在 FF 中实际上更快。不过我想说这并不重要,因为如果你声明了足够多的函数,这会成为一个问题,那么你就做错了。
-
@idbentley “如果你声明了足够多的函数,这会成为一个问题,那么你做错了什么”。像jsperf.com/function-declaration-vs-function-expression-2 这样的情况在现在的代码中很常见,对吧?是的,在优化时还有许多其他重要的东西需要考虑。但这不也应该考虑吗?
-
当然,做这样的事情很常见,但是做的次数足够多以至于对性能产生明显的影响是不太可能的。例如,与执行 AJAX 请求或 DOM 操作相比,这算不了什么。我之前的声明是想说做大量的函数声明(足以造成性能影响)是代码味道,你应该考虑重构。
标签: javascript function performance