j03*_*03m 2 javascript performance
在下面的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);
}
Run Code Online (Sandbox Code Playgroud)
执行此代码:
function declaredFn(a, b) {
return a + b;
};
for (i = 0; i < loops; i++) {
declaredFni, i);
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码:
for (i = 0; i < loops; i++) {
var func = function(a, b) {
return a + b;
};
func(i, i);
}
Run Code Online (Sandbox Code Playgroud)
比这段代码慢得多:
var expfunc = function(a, b) {
return a + b;
};
for (i = 0; i < loops; i++) {
expfunc(i, i);
}
Run Code Online (Sandbox Code Playgroud)
为什么?内部发生了什么?
如果使用function fn() {}声明定义函数,它将被提升到顶部.因此,这段代码:
for (var i = 0; i < loops; i++) {
function func(a, b) {
return a + b;
};
func(i, i);
}
Run Code Online (Sandbox Code Playgroud)
是完全等同于以下代码:
function declaredFn(a, b) { return a + b; };
for (i = 0; i < loops; i++) { declaredFn(i, i); }
Run Code Online (Sandbox Code Playgroud)
因为function声明被提升到了顶部.
但是,var fn = function() {}表达式不会被提升,因此您最终会在每个循环中定义该函数.
有关详细信息,请参阅此答案.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |