3

私はオープンソースプロジェクトを見ています、そしてこのようなものを見ています:

;(function(){
    // codes here
})()

そこにあるセミコロンに特別な意味があるかどうか知りたいのですが?

4

3 に答える 3

5

これは、ASI (自動セミコロン挿入) によりセミコロンを回避できるためです。

たとえば、次のようなコードをエラーなしで記述できます。

var a = 1
a.fn = function() {
    console.log(a)
}

見る?単一のセミコロンではありません。

ただし、セミコロンが挿入されていない場合があります。基本的に、実際のプロジェクトでは、そうでない場合が 1 つあります。それは、次の行が括弧で始まる場合です。

JavaScript パーサーは次の行を引数として受け取り、セミコロンを自動的に追加しません。

例:

var a = 1
(function() {})()
// The javascript parser will interpret this as "var a = 1(function() {})()", leading to a syntax error

これを回避するには、いくつかの方法があります。

  • 括弧で始まる行の先頭にセミコロンを追加します(これは、表示するコードで行われました)
  • 次の構造を使用します。

    !function() {}()

于 2012-04-06T14:24:12.023 に答える
1

JavaScriptには自動セミコロン挿入があります(ECMAScript言語仕様のセクション7.9を参照)。

セミコロンの挿入には、次の3つの基本的なルールがあります。

  1. プログラムが左から右に解析されるときに、文法の生成で許可されていないトークン(問題のあるトークンと呼ばれる)が検出された場合、次の1つ以上の場合、問題のあるトークンの前にセミコロンが自動的に挿入されます。条件は真です:
    • 問題のあるトークンは、少なくとも1つのLineTerminatorによって前のトークンから分離されています。
    • 問題のあるトークンは}です。
  2. プログラムが左から右に解析されるときに、トークンの入力ストリームの終わりに遭遇し、パーサーが入力トークンストリームを単一の完全なECMAScriptプログラムとして解析できない場合、セミコロンが最後に自動的に挿入されます。入力ストリーム。

通常、JavaScriptファイルの最後のセミコロンは省略できます(2番目のルール)。アプリケーションが複数のファイルをマージしてJavaScriptコードを作成する場合、構文エラーが発生します。それ;自体は空のステートメントなので、このような構文エラーを防ぐために使用できます。

于 2012-04-06T14:26:48.030 に答える
0

非常に良い説明がここにあります:

https://mislav.net/2010/05/semicolons/
(「セミコロンなしでコーディングするときの唯一の本当の落とし穴」の段落を参照)

var x = y
(a == b).print()

として評価される

var x = y(a == b).print()

要するに、「(」文字で始まるすべての行の前にセミコロンを置くことをお勧めします

于 2012-04-06T14:41:32.320 に答える