2012-04-19 4 views
3

私は最近、最初の簡単なjQueryプラグインを作成しました。私は誇りに思う。jQueryプラグインはどのようにグローバル状態を維持しますか?

http://jsfiddle.net/johnhoffman/wSeLY/1/

(function($) { 
    $.fn.makeRed = function() { 
     return this.each(function() { 
      $(this).css("color", "#f00"); 
     }); 
    } 
})(jQuery); 

それはしかし動作しますなぜ私が疑問に思って。 jQueryオブジェクトをすぐに実行されるこの囲まれた関数に渡します。

その後、| $ |オブジェクトはその無名関数内のローカル変数ですか?どのようにグローバルなシングルトンjQueryオブジェクトを変更するのですか?

つまり、私はちょうど$.fn.myFunctionName経由で関数を$ |囲まれた関数のローカル?どのようにグローバルjQueryオブジェクトを変更し、自分のスクリプトのグローバルスコープ全体でセレクタに私の関数(makeRed)を利用できるようにするのですか?

+0

クロージャがどのように機能するかを読んでください。 – Interrobang

答えて

2

は、| $ |オブジェクトはその無名関数内のローカル変数ですか?

はい、それはグローバルにアクセスされjQueryオブジェクトへの参照で、$は、関数内のローカル変数ですが、これは大きいですけど。物事は次のようになります。

window.jQuery (global) ----->-----> { ... } 
            ^
            | 
$ (local) ------------------>-------+ 

だから、あなたが同じオブジェクトを指す2つの変数を持っているし、あなたの匿名関数が呼び出された後、そのオブジェクトはまだ存在しています。

2

Javascriptのオブジェクトは参照渡しされるため、関数内の更新はすべてjQueryオブジェクトで保持されます。あなたはそれをちょうど名前$で参照しています。

私は非常にあなたが読むことをお勧めします:Javascript: The Good Partsそれはすべてこれを説明します。

関連する問題