2013-02-22 20 views
5

私は

(function(window, document, undefined){... 

または

で開くWebページに埋め込まれたいくつかのjQueryのスクリプトを見てきました
;(function ($, window, document, undefined) {... 

私はスクリプトが他のファイルと連結し、行方不明閉じ括弧があるされている場合;がある可能性が信じて、;は、コードの最初の行を削除からminifierを停止しますが、私はわからない。

投稿した2つのバリエーションは何ですか?なぜ人々はこのようなコードを開いているのですか?最初の例でドル記号がないのはなぜですか?

+4

おそらく最初のケースでは、 'jQuery'は引数として関数に渡されないためです。これは、コードを書いた人にはまったく問題ありません。セミコロンについては、http://stackoverflow.com/questions/1031718/what-is-the-consequence-of-this-bit-of-javascriptを参照してください。 –

答えて

5

これらは、可能な限り予測可能なスクリプト用の環境を作成するためのラッパーです。

(function($, window, document, undefined){ 
... 
})(jQuery, window, document); 

あなたの場合:あなたは関数式のために閉じ括弧を参照するスクリプト、および関数のシグネチャで定義されたパラメータの値に送信機能への即時呼び出しの終わりに

jQueryを使用する場合は、 $パラメータをインクルードします。 (またはそれを含むと思わなかった場合)

ご覧のとおり、undefinedという名前のパラメータの値はありません。パラメータに値を渡さないと、値はundefinedに設定されます。したがって、ファンクションブロック内でundefinedというパラメータの値はundefinedになります。これは、グローバル識別子undefinedがJavascriptの最新バージョンまでは定数ではなかったため、古いブラウザではundefinedというプロパティにはundefinedを表さない値を与えることができます。 (値が定義されていないパラメータは、グローバルプロパティundefinedの現在の値ではなく、実際の値がundefinedになります)。

疑問に思ったとおり、最初の余分なセミコロンは、合併するかもしれない。