1回以上のラインが切断され、プログラム入力の終了が挿入された後、}の前にのみ}
つまり、線、コードのブロック、およびプログラムの一部が終了する場合にのみ、セミコロンを省略できます。
つまり、次のコードを書くことができます
コードコピーは次のとおりです。
関数平方(x){
var n = +x
n * nを返します
}
ただし、次のコードのように書くことはできないため、エラーを報告します
コードコピーは次のとおりです。
関数領域(r){r = +r return math.pi*r*r} //エラー
後続の入力マークを解析できない場合にのみ挿入します
言い換えれば、セミコロン挿入はエラー補正メカニズムです。コードを読んで話してください
コードコピーは次のとおりです。
a = b
(f())
//次のステートメントの単価で、別のステートメントに正しく解析できます。
a = b(f())
a = b
f()
// 2つの独立したステートメントに解析されます
a = bf(); //解析は正しくありません
したがって、セミコロンを合法的に省略できるかどうかを判断するために、次のステートメントの最初に注意を払う必要があります。
(、[、 +、 - 、および /、その後、その前のセミコロンを省略しないことが最善です。
説明する例を挙げてください
コードコピーは次のとおりです。
a = b
['r'、 'g'、 'b']。foreach(function(key){
console.log(key);
});
あなたはもともとエラーはないと思っていましたが、パーサーは次の声明に解析されました
コードコピーは次のとおりです。
a = b ['r'、 'g'、 'b']。foreach(function(key){
console.log(key);
});
2番目の文はから始まるため[、パーサーは最初のステートメントの後にセミコロンを自動的に挿入しないため、上記のように解析されます。上記の方程式を解析するときに、b ['b']。
したがって、5人の文字から始まるステートメント(、[、 +、 - 、および /は、その前にセミコロンを省略しないようにするのが最善の場合。
セミコロンを省略したい場合は、経験豊富なプログラマーがステートメントに従って、パーサーが正しく分割することを確認します。以下に示すように
コードコピーは次のとおりです。
a = b
var x // a = bが(f())で解析されないことを確認するために、宣言声明がここに特別に追加されます
(f())
したがって、セミコロンを省略する必要がある場合は、次の行の開始マークが上記の5文字であるかどうかを確認する必要があります。パーサーはセミコロンの自動挿入を無効にするか、5文字([、 +、 - 、および / /
セミコロンを省略すると、スクリプト接続の問題が発生します
コードコピーは次のとおりです。
//file1.js
(関数 () {
// ...
})()
//file2.js
(関数 () {
// ...
})()
上記の2つのファイルが接続されている場合、それらは次のように解析されます
コードコピーは次のとおりです。
(関数 () {
// ...
})()(関数 () {
// ...
})()
したがって、セミコロンを省略するには、現在のファイルの次のタグだけでなく、スクリプトの接続後にステートメントの後に表示される可能性のあるタグについても注意する必要があります。
パーサーの解析エラーを回避するために、各ファイルに追加のセミコロンをプレフィックスして、スクリプトを不注意な接続から保護できます。ファイルの最初のステートメントが上記の5つの脆弱な文字で切り替えられている場合は、追加のセミコロンプレフィックスを追加する必要があります。
JavaScript構文制限生成
JavaScript構文制限制限:2つの文字の間にラインブレークは許可されていません。
例を挙げてください:
コードコピーは次のとおりです。
戻る
{};
上記のコードは解析されます
コードコピーは次のとおりです。
戻る;
{}
;
セミコロン挿入ルールは、自己排出および自己排除操作のためのルールです
コードコピーは次のとおりです。
a
++
b
上記のコードが解析されるものについて考えてください。 Autoincrementオペレーターはプリセットオペレーターとポストセット演算子の両方として使用できるが、ポストセットオペレーターはラインブレーク前に表示されないため、上記のコードは分析されるため、答えを伝えましょう。
コードコピーは次のとおりです。
A;
++ b;
セミコロンは、for loop emptステートメントの頭のセパレーターとして自動的に挿入されません。
コードコピーは次のとおりです。
for(var i = 0、合計= 1
i <長さ
i ++){
合計*= i;
}
上記のようなコードには、解析エラーがあります。
空のループ本体のwhileもセミコロンを表示する必要があります。そうしないと、解析エラーにもつながります。
コードコピーは次のとおりです。
function mytest(){
while(true)
}
エラーを避けるために、次のように記述する必要があります
コードコピーは次のとおりです。
function mytest(){
while(true);
}
要約しましょう
1.}タグの前、行の最後、プログラムの終わりにのみセミコロンを推定します
2.次のマークを解析できない場合にのみセミコロンを推測します
3.(、[、 +、 - 、および /文字)から始まるステートメントの前に、セミコロンを省略してはなりません。
4。スクリプトが接続されている場合、スクリプト間にセミコロンを明示的に挿入します
5.返品、投げ、破壊、続行、++のパラメーターの前にラインをラップしてはなりません。
6.セミコロンは、forループまたは空のステートメントのヘッダーのセパレーターとして推測することはできません。