2012-02-28 115 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

相關問題