"skip if condition" 和 "directly return" 之间的性能差异是什么?

What's the performance difference between "skip if condition" and "directly return"?

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

哪个执行时间更短?

我认为没有性能差异,但第二个函数的可读性更好,因为您不必缩进。您也可以在第二个函数的 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 块中定义的所有变量,这些变量从未 运行s,以便这些变量名称可以正确初始化。当函数为运行、var b;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;
    }
 }

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