条件 return 或单变量 return

Conditional returns or single variable return

我想知道是否有更好的方法 return 有条件地输入值。 如果不是,如果它对缩小 Javascript.

有任何不同

我正在查看 Google Javascript Style guide and they don't name anything about the issue. Same with Airbnb guidelines

使用多个条件 returns:

function demo(x, y) {
   if (x < y) {
       return getX();
   } else if (x === y) {
       return 'equal';
   }
   return getY();
}

或者有一个 return 并使用一个变量:

function demo(x, y) {
    var position;

    if (x < y) {
        position = getX();
    } else if (x === y) {
       position = 'equal';
    } else {
        position = getY();
    }
    return position;
}

使用 ternary/conditional 运算符。

在 Javascript 中,条件运算符可以计算为表达式,而不仅仅是语句。

var result = x < y ? getX() : getY();

这从左边开始评估,如果您的条件符合条件,那么结果将是第一部分,否则结果将是第二部分。

更多条件你得按赞

 var result = IsYoungerThan18 ? serveMilk() : IsYoungerThan21 ? serveBear() : serveWine();

所以你的情况应该是

var result = (x < y) ? getX() : (x == y) ? "equal" : getY();

下面是return statement的定义。

The return statement stops the execution of a function and returns a value from that function.

显然,条件 return 必须在 return 之前包含一个条件。 关于偏好,顾名思义,真的是习惯问题。 如果您习惯了一种语法,比如说,另一种语言,或者您只是更喜欢它 - 请使用它,因为它可能会减少语法错误。

关于压缩代码,我认为 switch/case 语法最适合简单条件,而三元运算非常适合 two-side 条件。

(注意!前面的哲学段落)

但最后,我相信重要的是您会理解您编写的代码。而且,有了经验,你会找到最适合你的。

您应该关注可读性。以最容易理解的方式编写代码。如果您返回的深度嵌套条件可能会混淆未来的阅读,但如果您在函数开始时有一系列提前退出可能会使代码更具可读性(与深度嵌套相比).分解大函数,将修饰留给编译器。 Closure Compiler 将为您的两个示例生成相同的结果。

示例:

http://closure-compiler.appspot.com/home#code%3D%252F%252F%2520%253D%253DClosureCompiler%253D%253D%250A%252F%252F%2520%2540compilation_level%2520SIMPLE_OPTIMIZATIONS%250A%252F%252F%2520%2540output_file_name%2520default.js%250A%252F%252F%2520%2540formatting%2520pretty_print%250A%252F%252F%2520%253D%253D%252FClosureCompiler%253D%253D%250A%250Afunction%2520demo1(x%252C%2520y)%2520%257B%250A%2520%2520%2520%2520var%2520position%253B%250A%250A%2520%2520%2520%2520if%2520(x%2520%253C%2520y)%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520position%2520%253D%2520getX()%253B%250A%2520%2520%2520%2520%257D%2520else%2520if%2520(x%2520%253D%253D%253D%2520y)%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520position%2520%253D%2520'equal'%253B%250A%2520%2520%2520%2520%257D%2520else%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520position%2520%253D%2520getY()%253B%250A%2520%2520%2520%2520%257D%250A%2520%2520%2520%2520return%2520position%253B%250A%257D%250A%250Afunction%2520demo2(x%252C%2520y)%2520%257B%250A%2520%2520%2520if%2520(x%2520%253C%2520y)%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520return%2520getX()%253B%250A%2520%2520%2520%257D%2520else%2520if%2520(x%2520%253D%253D%253D%2520y)%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520return%2520'equal'%253B%250A%2520%2520%2520%257D%250A%2520%2520%2520return%2520getY()%253B%250A%257D