-1

以下 2 个函数之间是否存在性能差异:

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 ...
 }

哪个执行时间更短?

4

2 回答 2

1

我不认为有性能差异,但是第二个函数在可读性方面更好,因为你不必缩进。您也可以!a在第二个函数的 if 语句中使用以获得更好的可读性。

于 2019-03-15T08:28:36.857 回答
0

第二个函数的解析和运行时间应该比第一个函数少,无论是在页面加载时还是在函数执行时。

在页面加载时,解释器必须遍历所有文本,检查其语法是否有效,从结果构造一个抽象语法树,然后(在较新的引擎上)将结果编译为机器代码。即使大部分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;and var c; 并且任何其他vars 将被提升到顶部:

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;
    }
 }

将被更快地解析、编译和运行。

于 2019-03-15T08:37:00.777 回答