143


33

JavaScriptライブラリの主要なセミコロンは何をしますか?

いくつかのJavaScriptライブラリで、最初にこの表記を見ました。

/**
 * Library XYZ
 */
;(function () {
  // ... and so on

「すぐに実行される関数」構文には完全に満足していますが

(function(){...})()

主要なセミコロンが何のためにあるのかと思っていました。 思いつくのは、それが保険であるということだけです。 つまり、ライブラリが他のバグのあるコードに埋め込まれている場合、「最後のステートメントはここで終わります」種類のスピードバンプとして機能します。

他の機能はありますか?

5 Answer


129


これにより、複数のJSファイルを安全に1つに連結し、1つのHTTP要求としてより迅速に処理できます。


28


実際に質問で最良の答えが出されたので、わかりやすくするためにここに書き留めておきます。

すぐに呼び出される関数式の前にある先頭の「;」は、「;」で適切に終了されていない式を含むファイルに連結中にファイルを追加するときのエラーを防ぐためにあります。

ベストプラクティスは、式をセミコロンで終了することですが、先頭のセミコロンも保護手段として使用します。


21


_ 一般に、ステートメントが(、[、/、、または-で始まる場合、前のステートメントの継続として解釈される可能性があります。 /、、および-で始まるステートメントは実際には非常にまれですが、(および[で始まるステートメントは、少なくとも一部のスタイルのJavaScriptプログラミングでは珍しくありません。 一部のプログラマーは、そのようなステートメントの先頭に防御的なセミコロンを配置して、前のステートメントが変更され、以前に終了したセミコロンが削除されても正常に動作し続けるようにします。 _

var x = 0 // Semicolon omitted here
;[x,x+1,x+2].forEach(console.log) // Defensive ; keeps this statement separate

ソース:


8


  • これは先頭のセミコロンと呼ばれます。*

その主な目的は、不適切に閉じられた問題を引き起こす可能性のある前のコードから自身を保護することです。 セミコロンはこれを防ぎます。 上記のコードが不適切に閉じられた場合、セミコロンがこれを修正します。 適切に閉じられていれば、セミコロンは無害になり、副作用はありません。


4


jsコードを縮小すると良いでしょう。 予期しない構文エラーを防ぎます。