条件返回或单变量返回

时间:2016-01-08 15:08:03

标签: javascript google-closure-compiler uglifyjs

我想知道如果有条件地返回值的更好方法会怎么样。 如果没有,如果它对缩小的Javascript有任何不同。

我正在检查Google Javascript Style guide并且他们没有对此问题进行任何说明。与Airbnb guidelines

相同

使用多个条件退货:

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

或者使用变量进行单次返回:

function demo(x, y) {
    var position;

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

3 个答案:

答案 0 :(得分:1)

以下是return statement的定义。

  

return语句停止执行函数并从该函数返回一个值。

显然,条件返回必须包括return之前的条件。 关于偏好,正如这个词暗示的那样,这实际上是一个习惯问题。 如果您习惯使用另一种语言中的一种语法,或者您更喜欢它 - 请使用它,因为它可能会减少语法错误。

关于缩小代码,我相信开关/案例语法最适用于简单条件,三元操作非常适合双方条件。

(小心!前面的哲学段落)

但是,最后,重要的是,我相信,你会理解你写的代码。而且,凭借经验,您将找到最适合您的产品。

答案 1 :(得分:1)

您应该关注可读性。以最容易理解的方式编写代码。如果你从深度嵌套状态返回,可能会对将来的读取造成混淆,但是如果你在函数开始时有一系列早期退出可能会使代码更具可读性(与深度嵌套相比) )。分解大功能并将编号留给编译器。 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

答案 2 :(得分:0)

使用三元/条件运算符。

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

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

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

对于更多条件,您必须像

一样使用它
 var result = IsYoungerThan18 ? serveMilk() : IsYoungerThan21 ? serveBear() : serveWine();

所以在你的情况下它应该是

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