JavaScript条件块与控制流的空白返回

时间:2011-03-08 20:56:17

标签: javascript

我总是编写我的JavaScript块

var functionName = function() {
  if (someCondition) {
      // stuff
  } else {
      // stuff
  }
};

但今天我看到了

var functionName = function() {
  if (someCondition) {
     // stuff
     return;
  }
  // stuff
};

我喜欢第一个例子在逻辑中更明确。 您想要或不想以第二种方式展示它的原因是什么?

3 个答案:

答案 0 :(得分:12)

如果您有多个someCondition,则缩进较少。

想象:

var functionName = function() {
    if (someCondition) {
        // stuff
    } else {
        // stuff
        if (someConditionB) {
            // stuff

        } else {
            // stuff

            if (someConditionC) {
                // stuff

            } else {
                // stuff

                if (someConditionD) {
                    // stuff
                } else {
                    // stuff
                }
            }
        }
    }
};

如果没有其他所有内容,这将更具可读性:

var functionName = function() {
    if (someCondition) {
        // stuff
        return;
    }

    if (someConditionB) {
        // stuff
        return;
    }

    if (someConditionC) {
        // stuff
        return;
    }
    if (someConditionD) {
        // stuff
        return;
    }

    // stuff
};

答案 1 :(得分:4)

许多编码标准要求您不要“提前退出”功能。这是可读性和“正确性”[*]

之间的权衡

提前退出避免了后续代码在额外级别缩进的需要。例如,恕我直言,在函数顶部将一些错误检测检查组合在一起,并在失败时提前退出,并将函数的内容写为正常,这是有意义的。

另一方面,在阅读用于调试目的的代码时,很容易错过提前退出,并最终试图在代码的错误部分找到错误。

[*]相同的代码标准通常会避免使用breakcontinue。 FWIW我认为这是过度应用Djikstra的“GOTO被认为是有害的”口头禅的症状。

答案 2 :(得分:1)

您可能希望在两种情况下使用方法2:

案例1:你的逻辑之后你有更多的东西你不想跑。执行的代码可以满足您的所有需求,而且您不需要额外的东西。

案例2:根据函数附加的内容,您希望返回false以防止操作。一旦这样的实例成为表单的onSubmit,并验证输入。如果不好,请立即返回false并阻止表单提交。