2011-03-08 7 views
4

のJavaScriptの厄介なASI(自動セミコロン挿入)、そしてしばしばthis exampleを引用についてPeople often talk ...これはASIの問題か、戻り文法だけの問題ですか?

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

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

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

は本当にb()return後に挿入されているセミコロンあり、またはJavaScriptの文法状態を行い、戻り値がなければならないことそれに続いて明示的に記載されます(つまり、\nはありません)?

+1

あなたの答えは次のリンクから見つけることができます。http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion –

答えて

2

セミコロンが挿入されていないと思います。解析のあいまいさがあり、解決策は「戻り値」と次の式を別々の2つのステートメントとして扱うことです。私は純粋に文法的な観点からは理にかなっている理由を理解していますが、の具体的なの場合のように、返信文の場合はと保証されています。保証されていない孤立した表現文は、 。

トリックが生成した集計SO repポイントはいくつですか?

編集2014年4月4日 —技術的に二つの文に文を分割するその決定は「セミコロン挿入」と呼ばれるです。誰も挿入されたセミコロンを実際に見ることはありません。それはパーサーの想像力のようなものです:)あなたが何を呼んでも効果は同じです。

+0

あなたの答えは、そうでないものの意味があります。 Bravo :) +1 – alex

+0

ここを見てください:http://inimino.org/~inimino/blog/javascript_semicolons簡潔で明確です。 –

0

戻り値がreturn文と同じ行になければならないということは仕様には何もありません。セミコロンの不正な挿入です。

+2

この引用符は別段のことではありませんか? ? * [ECMASpec](http://es5.github.io/x5.html)の[LineTerminatorはここにありません]式を返します。 – alex