2012-02-28 114 views
52

的JSLint抱怨以下(无用例子)代码无效:为什么JSLint会在“return”之后抱怨“Unexpected'else'”?

(function (x) { 
    "use strict"; 
    if (x === 1) { 
     return 1; 
    } else if (x === 2) { 
     return -1; 
    } 
    return 0; 
}(1)); 

Error: Problem at line 4 character 9: Unexpected 'else' after 'return'.

return 1;

是它当回事表明它是不好用的,如果/ else结构里面return语句?

它认为这个版本是好的:

(function (x) { 
    "use strict"; 
    var returnval = 0; 
    if (x === 1) { 
     returnval = 1; 
    } else if (x === 2) { 
     returnval = -1; 
    } 
    return returnval; 
}(1)); 
+6

有没有办法在JSLint中禁用此规则? – 2013-03-13 19:08:35

回答

85

它只是告诉你,elsereturn是多余的。以下是好的:

(function (x) { 
    "use strict"; 
    if (x === 1) { 
     return 1; 
    } 
    if (x === 2) { 
     return -1; 
    } 
    return 0; 
}(1)); 
+49

你是对的。尽管我个人更喜欢if-else链,但它感觉就像它更清楚地贯穿代码的意图。 – Hal 2012-02-28 11:21:30

+2

@Hal特别有用的重构,当你实际上决定使用一个'返回'。那么省略'else'将会是一个错误。 – Sulthan 2014-08-09 08:06:59

1

它更好地有一个函数总是返回的东西,因为它增加了一致性。已知JSLint相当严格,并且会伤害程序员的感受。无法帮助它。我个人认为版本1是好的

4

我发现w/jslint是,如果你坚持规则 - 50%是荒谬的,但没有负面影响你的代码。另外50%(左右)会给你带来好处。所以为其他50%做。这个特殊的例子迫使你明确表达一个条件或类似的逆过程......而不是让它隐含着一个else ...同样适用于if/else我的意思。

+1

不同意。是的,50%不会提供“无负面影响”。但它只涉及代码本身。考虑未来的维护,接近调试时间以及其他不像你一样编码或者不是忍者的开发者。 JSLint以其严格的模式为您提供通过标准/规范化的方式进行编码,使任何人都可以阅读/理解/与每个人一起编码,而不是关于经验/技能或时间。是的,它是严格的,很难尊重,但是当你的代码符合规范时,它是一个“跨人类代码”。 – MathKimRobin 2014-12-08 16:52:56

相关问题