2011-09-07 14 views
2

我只是失去了相當多的時間,因爲我改變了閱讀(類似)的JavaScript函數因爲語言不需要分號,我可以防止JavaScript中的愚蠢錯誤嗎?

function F(a,b,c) { 

    return x(a,b,c) + 
      y(a,b,c) + 
      z(a,b,c); 
} 

function F(a,b,c) { 

    return // x(a,b,c) + 
      y(a,b,c) + 
      z(a,b,c); 
} 

,當我需要測試一些。

更改後的函數返回undefined,當然,因爲該語言不需要分號並假定return是一個完整的語句。

不幸的是,當我註釋掉x(a,b,c)我沒有想到這個含義。那麼,是否有辦法防止未來出現這種愚蠢的錯誤。

+5

是的,想想你在做什麼的含義。 –

+1

冒着生硬的危險,這聽起來像是在咆哮,因爲你在這個小小的錯誤上失去了很多時間。因此,我認爲你將來不太可能做到這一點,並且不需要任何特殊技巧來阻止這種情況發生。 – Peter

+0

你可以閱讀有關自動分號插入:http://es5.github.com/#x7.9 –

回答

2

整合JSLint到您的構建和失敗的基礎之上。你真正想要的是「返回後無法到達」。

6

JSLint和單元測試框架。

Problem at line 3 character 11: Expected ';' and instead saw 'y'. 
5

分號插入特別討厭return。解決此案例的方法:請勿return多行語句。

function F(a,b,c) 
{ 
    var toReturn x(a,b,c) + 
      y(a,b,c) + 
      z(a,b,c); 

    return toReturn; 
} 
+0

自動化進程是除了遊戲之外我進入編程的主要原因之一。如果理論上可以實現自動化,那麼我必須自動化,而不是手工完成工作。這似乎很容易出錯。 –

+0

我首先想到了這一點。但後來認爲,與僅使用parens相比,對現有聲明的改動太大了。 – Tomalak

+0

我想你可能會發現任何非簡單的返回語句,在同一行上以分號結尾,並且失敗。儘管如此,這仍然有點不幸。 –

8

懶調試器的解決方案:當您發現

Problem at line 7 character 12: Unreachable 'y' after 'return'.讓這個普通的行和字符,當然

function F(a,b,c) { 
    return (
     // x(a,b,c) + 
     y(a,b,c) + 
     z(a,b,c) 
    ); 
} 
+1

+1,甚至比我的解決方案更好 –

+0

我仍然希望以某種方式將此自動化功能加入到構建中。類似於「捕捉所有有回報而沒有括號括起來的函數」 –

+1

+1是的,這是爲什麼我在返回語句中使用parens的原因之一。口譯員不能自由決定我的退貨聲明的結束位置。 – jfriend00