循环中javascript中函数声明与函数表达式的性能
Performance of function declaration vs function expressions in javascript in a loop
在以下jsperf中:http://jsperf.com/defined-function-vs-in-loop-function/3
你会注意到这个代码:
for (var i = 0; i < loops; i++) {
function func(a, b) {
return a + b;
};
func(i, i);
}
与此代码不相上下:
function declaredFn(a, b) {
return a + b;
};
for (i = 0; i < loops; i++) {
declaredFni, i);
}
但是这个代码:
for (i = 0; i < loops; i++) {
var func = function(a, b) {
return a + b;
};
func(i, i);
}
明显慢于此代码:
var expfunc = function(a, b) {
return a + b;
};
for (i = 0; i < loops; i++) {
expfunc(i, i);
}
为什么?内部发生了什么?
如果使用function fn() {}
声明定义一个函数,它将被提升到顶部。因此,这个代码:
for (var i = 0; i < loops; i++) {
function func(a, b) {
return a + b;
};
func(i, i);
}
与此代码完全等效:
function declaredFn(a, b) { return a + b; };
for (i = 0; i < loops; i++) { declaredFn(i, i); }
因为CCD_ 2声明被提升到顶部。
但是,var fn = function() {}
表达式不会被提升,因此您最终会在每个循环上定义该函数。
有关详细信息,请参阅此答案。
在片段中
for (i = 0; i < loops; i++) {
var func = function(a, b) {
return a + b;
};
func(i, i);
}
您正在将一个函数分配给一个变量,该变量将在当前范围的其余部分中可用。当您在循环中执行此操作时,函数会被多次定义和分配,因此比您提到的其他情况下花费更多的时间。
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 函数声明与函数表达式之间的性能差异
- 从自执行函数返回函数的Javascript性能命中率
- 性能惩罚JavaScript回调函数
- 在运行Javascript/jQuery中的函数之前,检查元素是否存在是否更具性能
- 为什么封装的Javascript函数有如此巨大的性能差异
- 测量JavaScript函数的内存使用情况、执行时间和性能
- 从性能的角度来看,函数声明与表达式
- 在节点 js 中编写命名函数的性能是否更高
- Javascript 函数性能
- Javascript 嵌套函数性能
- 函数和对象之间的差异,以及它如何影响性能
- JavaScript,连续的JS和AJAX函数会随着时间的推移降低页面性能
- 在 JavaScript 中将同一函数分配给多个变量时出现性能问题
- Javascript 递归函数性能下降
- 如何限制或限制此函数调用中的函数调用次数(以提高性能)
- 匿名函数vs常规函数性能/优化
- Javascript - V8中添加到String.prototype的函数性能很差
- 立即执行的函数性能
- JQuery grep (. .)VS原生JavaScript过滤器(..)函数性能