JavaScriptのセミコロン挿入の仕組みを詳しく紹介_基礎知識

WBOY
リリース: 2016-05-16 16:14:35
オリジナル
1188 人が閲覧しました

は、} の前、1 つ以上の改行の後、およびプログラム入力の最後にのみ

として挿入されます。

これは、行、コード ブロック、プログラムの末尾のセミコロンのみを省略できることを意味します。

つまり、次のコードを書くことができます

コードをコピー コードは次のとおりです:

関数 square(x) {
var n = x
n * n
を返します }

ただし、次のようなコードを記述することはできません。そうしないと、エラーが報告されます
コードをコピー コードは次のとおりです:

function area(r) { r = r return Math.PI*r*r }//error

後続の入力タグを解析できない場合にのみ

を挿入します

言い換えれば、セミコロンの挿入はエラー修正メカニズムです。コードを見て話してください

コードをコピー コードは次のとおりです:

a = b
(f())
//単一のステートメントに正しく解析できます。単価は次のステートメントです
。 a = b(f())

a = b
f()
// 2 つの独立したステートメントに解析されます
a = bf();//解析エラー

したがって、セミコロンを合法的に省略できるかどうかを判断するには、次のステートメントの先頭に注意する必要があります。

(、[、-、および / これらの 5 文字はステートメントを開始します。その場合は、先頭のセミコロンを省略しないことをお勧めします。

例を挙げてください

コードをコピー コードは次のとおりです:

a = b
['r', 'g', 'b'].forEach(関数 (キー) {
console.log(key);
});

当初はエラーはないと考えられていましたが、パーサーはそれを次のステートメントに解析しました
コードをコピー コードは次のとおりです:

a = b['r', 'g', 'b'].forEach(関数(キー) {
console.log(key);
});

2 番目のステートメントは [ で始まるため、パーサーは最初のステートメントの後にセミコロンを自動的に挿入しません。そのため、上記の式は b['b'].forEach として解析されます。間違っていませんか?

したがって、これらの 5 文字 ([、-、/) で始まる文の場合は、先頭のセミコロンを省略しないことが最善です。

セミコロンを省略したい場合、経験豊富なプログラマはこのステートメントの後に宣言ステートメントを付けて、パーサーが正しく解析できるようにします。以下に示すように

コードをコピー コードは次のとおりです:

a = b
var x//a = b が (f())
と一緒に解析されないように、宣言ステートメントがここに特別に追加されています。 (f())

したがって、セミコロンを省略する必要がある場合は、次の行の開始マークが上記の 5 文字であるかどうかを確認する必要があります。これにより、パーサーはセミコロンの自動挿入を無効にします。または、5 文字 (, [, 、-、および / の前にセミコロンを付けます

セミコロンを省略するとスクリプト接続の問題が発生します

コードをコピーします コードは次のとおりです:

//file1.js
(関数() {
//......
})()

//file2.js
(関数() {
//......
})()

上記 2 つのファイルを接続すると、次のように解析されます

コードをコピーします コードは次のとおりです:

(関数() {
//......
})()(関数 () {
//......
})()

セミコロンを省略すると、現在のファイル内の次のトークンだけでなく、スクリプトが接続された後のステートメントの後に出現する可能性のあるトークンにも注意する必要があります。

パーサーの解析エラーを回避するには、各ファイルの先頭に追加のセミコロンを付けて、スクリプトを不用意な連結から保護します。ファイル内の最初のステートメントが上記の 5 つの脆弱な文字で始まる場合は、追加のセミコロン接頭辞を追加する必要があります。

JavaScript 構文により制作が制限されています

JavaScript 構文では生成が制限されています。2 つの文字の間に改行は許可されません。

例:

コードをコピー コードは次のとおりです:

戻る
{};

上記のコードは
に解析されます。
コードをコピー コードは次のとおりです:

戻る;
{}
;

自動インクリメントおよび自動デクリメント操作のセミコロン挿入ルール

コードをコピーします コードは次のとおりです:



b

考えてみてください。上記のコードは解析されて何になるでしょうか?答えを教えてください。インクリメント演算子は前置演算子と後置演算子の両方として使用できますが、後置演算子は改行の前に出現できないため、上記のコードは
に解析されます。
コードをコピー コードは次のとおりです:

あ;
b;

セミコロンは、空の for ループ ステートメントの先頭に区切り文字として自動的に挿入されません

コードをコピーします コードは次のとおりです:

for (var i = 0,total=1

i) {
合計*=i;
}

上記のようなコードは解析エラーを引き起こします。

空のループ本体の while にもセミコロンを表示する必要があります。そうしないと解析エラーが発生します

コードをコピー コードは次のとおりです:

関数 mytest() {
一方 (本当)
}

エラーを避けるためには次のように記述する必要があります
コードをコピー コードは次のとおりです:

関数 mytest() {
一方 (真) ;
}

要約すると

1. セミコロンは、} マークの前、行末、プログラムの末尾でのみ推定されます
2. セミコロン
は、次のタグが解析できない場合にのみ推定されます。 3. (、[、-、/ の文字で始まるステートメントの前にセミコロン
を省略してはなりません) 4. スクリプトをリンクするときは、スクリプト間にセミコロン
を明示的に挿入します。 5. return、throw、break、 continue、または --
のパラメータの前で改行しないでください。 6. セミコロンを for ループの先頭または空のステートメントの区切り文字として推定することはできません

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!