2011-03-08 81 views
4

People often talk關於JavaScript的討厭ASI(自動分號插入),並經常引用this example ...這是ASI問題還是僅僅是返回語法?

function a() { 
    return [ 
     'a', 
     'b', 
     'c' 
    ]; 
} 

function b() { 
    return 
    [ 
     'a', 
     'b', 
     'c' 
    ]; 
} 

console.log(a(), b()); 
// ["a", "b", "c"] undefined 

真的是有在b()return後插入一個分號,或做JavaScript的語法狀態返回的值必須明確說明後(即沒有0​​)?

+1

你可以找到你的答案在下面的鏈接.. http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion –

回答

2

我不認爲有一個分號「插入」。只是在那裏存在解析歧義,解決方法是將「返回」和下列表達式視爲兩個單獨的語句。我明白爲什麼從純語法的角度來看它是有道理的,但它似乎是一個奇怪的決定,在特定的情況下的「返回」的聲明,因爲決定是保證留下一個永遠不會執行的孤兒表達式語句懸而未決。

我想知道有多少總計的SO代表點技巧已經產生?

編輯2014年4月4日 —技術上這一決定的語句分成兩條語句稱爲「插入分號」。沒有人真的看到插入的分號;這是解析器的想象力:)不管你怎麼稱呼,效果都是一樣的。

+0

你的回答是有意義的,但事實並非如此。布拉沃:) +1 – alex

+0

看看這裏:http://inimino.org/~inimino/blog/javascript_semicolons簡潔明瞭。 –

0

規範中沒有什麼說返回值必須與return語句在同一行上,這只是不好的分號插入。

+2

這個引號是否不說? *返回[沒有LineTerminator here]表達式; *來自[ECMASpec](http://es5.github.io/x5.html)。 – alex

相關問題