以下两个功能之间是否存在性能差异:
function a() {
var a = false;
if(a == true) {
... Many lines, e.g. 1 million lines ...
}
}
function b() {
var a = false;
if (a != true) {
return;
}
... Many lines, e.g. 1 million lines ...
}
哪一个执行时间较短?
我认为没有性能差异,但第二个功能更易于阅读,因为您不必缩进。您还可以在第二个函数的if语句中使用!a
以获得更好的可读性。
在页面加载和执行函数时,第二个函数应该比第一个函数花费更少的时间来解析和运行。
在页面加载时,解释器必须遍历所有文本,检查其语法是否有效,从结果构造抽象语法树和(在较新的引擎上)将结果编译为机器代码。即使大多数a
函数体从未被执行过,它仍然需要被解析。解析100万行Javascript是一项非常重要的任务。
当执行每个函数时,a
可能比b
运行更多时间,即使只是一点点 - 例如,如果a
在这些行中定义了许多变量,那么变量作用于a
:
function a() {
var a = false;
if(a) {
var b = 'b';
var c = 'c';
// more lines
}
}
运行该函数时,解释器必须查看从未运行的if
块中定义的所有变量,以便可以正确初始化这些变量名称。当函数运行时,var b;
和var c
;任何其他var
s将被提升到顶部:
function a() {
var a;
var b;
var c;
// initialize any other variables local to this function
a = false;
if(a) {
b = 'b';
c = 'c';
// more lines
}
}
如果要初始化有许多变量,这可能会导致函数比没有变量初始化时花费更长的时间。
相比之下,一个函数没有多余的变量来初始化,也没有多行要解析:
function b() {
var a = false;
if (a != true) {
return;
}
}
将被更快地解析,编译和运行。