私は仕様のこれら3つのルールをあまり理解できませんでした-よりわかりやすい英語が欲しいのですが-これは私がJavaScriptから収集したものです:The Definitive Guide、6th Edition、David Flanagan、O'Reilly、2011:
見積もり:
JavaScriptはすべての改行をセミコロンとして扱いません。通常、セミコロンなしでコードを解析できない場合のみ、改行をセミコロンとして扱います。
別の引用:コードについて
var a
a
=
3 console.log(a)
JavaScriptは、2番目の改行をセミコロンとして扱いません。これは、長いステートメントa = 3の解析を続行できるためです。
そして:
JavaScriptが2行目を1行目のステートメントの継続として解析できない場合、改行をセミコロンとして解釈するという一般的なルールの2つの例外。最初の例外には、return、break、およびcontinueステートメントが含まれます
...これらの単語の後に改行がある場合... JavaScriptは常にその改行をセミコロンとして解釈します。
... 2番目の例外には++および-演算子が含まれます...これらの演算子のいずれかを後置演算子として使用する場合は、それらが適用される式と同じ行に表示される必要があります。それ以外の場合、改行はセミコロンとして扱われ、++または-は後続のコードに適用される前置演算子として解析されます。たとえば、次のコードを検討してください。
x
++
y
としてx; ++y;
ではなくとして解析されますx++; y
だから私はそれを簡略化すると思います、それはつまり:
一般的には、JavaScriptが長く、それが理にかなっているようように、コードの継続として扱います- 2例を除い:のようないくつかのキーワードの後に(1) 、return
、break
、continue
および(2)それが見れば++
または--
新しい行に、それが追加されます;
前の行の末尾。
「意味のある限りコードの継続として扱う」という部分は、正規表現の貪欲なマッチングのように感じさせます。
上記のように、つまりreturn
改行があると、JavaScriptインタープリターは;
(再度引用:改行がこれらの単語の後に表示された場合(例:return
)... JavaScriptは常にその改行をセミコロンとして解釈します)
そしてこの理由により、の古典的な例
return
{
foo: 1
}
JavaScriptインタープリターはそれを次のように扱うため、期待どおりに動作しません。
return; // returning nothing
{
foo: 1
}
return
:の直後に改行を入れてはいけません。
return {
foo: 1
}
それが適切に機能するために。そして、;
もしあなたが;
after anyステートメントを使うというルールに従うなら、あなた自身を挿入するかもしれません:
return {
foo: 1
};