JavaScriptのセミコロン補完問題
2202 ワード
JavaScriptでは、ステートメントがセミコロンで終わる.セミコロンを省略すると、ECMAScriptの仕様に従って文末を決定します.ECMAScript仕様の説明では、下記のような語句に対して、セミコロンがないと、解像器は自動的にセミコロンを適当な位置に追加します.空文 変数文 表現文 do-while文 contingue文 break文 return文 throw文 セミコロンに自動的に追加されるルールは以下の3つです.
一、解析器はファイルの最後に当たります.
二、解析器は語法に合わない記号(token)に出会い、また(a)この記号と前の記号との間に改行がある.あるいは(b)この記号は}です.
三、コンフリクトは下記の5種類のresticted productionsに出会います.そして後ろに改行があります.接尾辞式+と-- contingue文 break文 return文 throw文 第一条規則で発生しやすい問題は、ツールを使ってJavaScriptファイルをマージする場合、二つのファイルは正しいですが、最初のファイルの最後の行には行末番号と改行がありません.マージした後に、第二のファイルの先頭行と連結され、マージされたファイルは間違っています.
第二条規則が発生しやすい問題は、後のコードと前のコードを合わせて文法にも適合する場合、例えば:
第三条ルールにありがちな問題は、return後に改行するときにあります.例えば、
自動的にセミコロンを追加する具体的なルールはECMAScript仕様を見ることができます.
参考資料:[1] ECMAScript 5.1 Language Specification-啣Automatic Semicolon Insertion[2] Javascriptの10の設計欠陥-阮一峰のネット日記[3] JavaScript文の後にセミコロンを付けますか?haxの技術ブログ-ITeE技術サイト[4] JavaScript Semicolon Insertion[5] Dealing with JavaScript's Automatic Semicolon Insertion[6] Expressitions versus statements in JavaScript
一、解析器はファイルの最後に当たります.
二、解析器は語法に合わない記号(token)に出会い、また(a)この記号と前の記号との間に改行がある.あるいは(b)この記号は}です.
三、コンフリクトは下記の5種類のresticted productionsに出会います.そして後ろに改行があります.
第二条規則が発生しやすい問題は、後のコードと前のコードを合わせて文法にも適合する場合、例えば:
var fun = function(){
return function() {
console.log("1");
}
}
(function(){
console.log('2');
})()
このとき、前のコードの後ろには自動的にセミコロンが追加されなくなり、2つの部分がつながってしまいます.出力の結果は1で、2ではありません.一般的に、行頭に注意すべきです. (、[、+、-、および/の5つの記号は、上のコードと接続されている可能性がありますので、エラーが発生します.第三条ルールにありがちな問題は、return後に改行するときにあります.例えば、
function() {
return
{
i: 1,
j: 2
};
}
このとき、リターンの後には、オブジェクトではなく、undefinedの戻り値が自動的に付加されます.自動的にセミコロンを追加する具体的なルールはECMAScript仕様を見ることができます.
参考資料:[1] ECMAScript 5.1 Language Specification-啣Automatic Semicolon Insertion[2] Javascriptの10の設計欠陥-阮一峰のネット日記[3] JavaScript文の後にセミコロンを付けますか?haxの技術ブログ-ITeE技術サイト[4] JavaScript Semicolon Insertion[5] Dealing with JavaScript's Automatic Semicolon Insertion[6] Expressitions versus statements in JavaScript