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