2011-01-12 41 views
1

由於this的原因,我已經習慣了將所有的case語句包裝在C語言的大括號中,但JSLint正在拋出一個合適的習慣。它停止在那一點驗證。JSLint和「預計看到一個聲明,而是看到一個塊。」錯誤

我的問題是:這是在JS這種不好的做法?我是否不必擔心範圍問題,因爲JS有函數範圍(我理解這是怎麼回事,我只是想有一個很好的理由不會「一致」)?

(我知道,不同的語言需要不同的做法,但我試圖儘可能consisten跨語言,以幫助保護我的理智。)

回答

4

好問題。

是JSLint的抱怨這樣做的原因是因爲它實際上是違背了開關/箱statments語言規範:

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

https://developer.mozilla.org/en/JavaScript/Reference/Statements/switch

中的JavaScript compier會容忍它,但是JSLint關於確保您的代碼遵守更嚴格和更正確的JavaScript子集。 (道格拉斯克羅克福德所說的「良好的位」!)

此外,額外的支撐是額外的字符,你將不得不與網站傳輸。如果你不需要它們,爲什麼要傳輸它們?

參考上面的鏈接,同樣的問題不會出現在JavaScript中。所以,下面的工作:

var x = 0; 
switch(x){ 
    case 0: 
     var y = 1; 
     alert(y); 
} 

看到它在此的jsfiddle:http://jsfiddle.net/LKWwB/

最後,關於你的理智,我會放棄你有它脆弱的抓地力。我做了很多年,並且對它更加快樂:-)

+0

非常感謝。很高興知道答案真的很簡單,「因爲這是不正確的!」 – griotspeak 2011-01-25 17:11:22

相關問題