2011-01-04 8 views
8

jQueryのは、匿名関数で、それがすべてのコードだラップから始まり:jQueryの無名関数ラッパーの目的は何ですか?

(function (window, undefined) { 
    /* 
    ...jquery code... 
    */ 
}) (window); 

私は機能が読まれているスクリプト全体時に即座に実行されていることを得るが、引数の目的は何ですか? 1つはグローバルオブジェクト参照であり、もう1つはプロパティ参照です。

スクリプト開発の初期段階では、定義されていないものが実際に別のものとして定義されていたことを覚えています(私はそのことを覚えていますか?)。それはこれに関連していましたか?

また、関数が演算子として使用されているようですか?上記のように、私は文の構文を全く理解していません。多分、助けになる文脈があるでしょうか?

function(window,undefined) 

が機能

匿名コール})(window);は、スクリプトにウィンドウの変数を渡すにwindowundefined変数を提供します。

+0

これはjQueryのコードです:http://code.jquery.com/jquery-1.4.4.js – Dexter

答えて

11

ラッパーは多くのことを行います。

ユーザーがウィンドウオブジェクトをオーバーライドする場合、彼らは簡単に正しいwindow変数すなわちを使用するようにスクリプトを変更することができるようになります:

(function(window,undefined){})(w); 

渡される二番目のパラメータの欠如が持っているundefined変数を設定しますプログラマがundefinedをオーバーライドすることによってjQueryを台無しにするのを防ぐundefinedの値。

+0

これは私が理解していると思います(http://mpathirage.com/files /javascript_ninja/JavaScriptNinja_ch3_Article2.pdf。したがって、jQueryのロード後にウィンドウオブジェクトを操作することができます。この関数に呼び出されたウィンドウオブジェクトには影響しませんか? – Dexter

+0

アプリケーションが壊れている方が良いと思います。開発者は自分のコードを見ている人を混乱させたくない場合を除いて、 'undefined'に値を代入しても構わないと思っています。 – mikerobi

+0

@Dexter JSでのオブジェクトは参照(ソート) jQueryに渡されたウィンドウオブジェクトを変更すると、jQueryがウィンドウオブジェクトに保持する参照にはまだ影響がありますが、ウィンドウオブジェクトをいくつかの新しいobでオーバーライドすることができますject。すなわち 'window.foo = 'bar''はjQuery内でアクセス可能ですが、' window = {foo:' bar '} 'は使用できません。 – zzzzBov

関連する問題