2009-12-09 13 views
133

いくつかのJavaScriptライブラリでは、私は最初からこの表記を見ました:JavaScriptライブラリの主要なセミコロンは何をしていますか?

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

「即座に実行される関数」構文にはまったく慣れていますが

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

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

その他の機能はありますか?

+6

私はあなたが正しい答えを得ていると思います。世界中にバグのあるJavaScriptがたくさんあるので、保険は重要です。 – kdgregory

答えて

120

これを使用すると、複数のJSファイルを1つのファイルに安全に連結して、1つのHTTP要求としてすばやく処理できます。

+12

しかし、すべてのファイルが正しくコーディングされていれば、それは必要ではありませんか? – Boldewyn

+5

いいえ:あなたの例では、 '(function(){...})()(function(){...})()'を得るでしょう。 –

+6

私は '正しくコーディングされた'という意味で、すべてのライブラリは正しい量の末尾のセミコロンで終わっています... – Boldewyn

4

jsコードを小さくすると効果的です。予期しない構文エラーを防止します。

+0

何が好きですか?セミコロンは次のコードで意味がありますか、または実際のライブラリの前に仮想のバグコードがマージされているだけですか? – Boldewyn

+0

そのコードだけでは特別な意味はありませんが、そのコードが他のコードの真中にあるときに、それを1行に縮小すると、(1)前の行にセミコロンがない、 1)前のものも関数なので、エラーが出たときにはデバッグが難しく、実行前の罰金を減らすため、バグを起こすことはできません()()()() – YOU

+1

しかしこれを正確に処理するのは、確かに仕掛け人の責任です。最近、バギーの小型化機が普及していますか? –

24

最良の答えは、実際に問題に与えられたので、私はちょうど明確にするため、ここでそれを書き留めます:

中にファイルを追加する際に、すぐに、呼び出される関数式の前にある大手;がエラーを防止することがあります適切に終了していない式を含むファイルへの連結を;とします。

ベストプラクティスは、式をセミコロンで終了することですが、セミコロンをセーフガードとして使用することをお勧めします。一般的に

+0

防御セミコロンを使用している場合、なぜ式をセミコロンで終了させるのでしょうか?それぞれの行の最後にセミコロンを置くか、防御セミコロンを使うかのどちらかです。両方を行うと、両方を行う理由があると誤って結論づけられます。防御的なセミコロンを使用するアドバイスは良いです。 \ n "'のすべてのインスタンスを '"; \ n "'に置き換えるアドバイスは意味をなさない。 –

+2

@VladimirKornea:自分のライブラリだけを常に使用しているわけではないので:) – jvenema

+0

@jvenemaなぜそれが違いを生むのか分かりません。 –

20

文が(、[、/、+、またはで始まる場合、 - 、それは は、前の文の継続として解釈される可能性可能性があります/、+で始まる文。 - 実際にはまれですが、(と[で始まる文は、少なくともJavaScriptプログラミングのスタイルではまったく ではありません)一部のプログラマは のように、そのような文の冒頭に防御セミコロンを入れます。たとえその前のステートメントが変更され、以前に セミコロンを終了していても、 は正常に動作します。

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

出典:

Javascript the Definitive Guide 6th edition

6

これは大手セミコロンと呼ばれています。

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

関連する問題