0

私はjQueryプラグインについて読んでおり、公式ガイドで著者は次のように述べています。

「でも待ってください! 私が知っていて大好きな素晴らしいドル記号はどこにありますか? まだそこにありますが、プラグインがドル記号を使用する可能性のある他のライブラリと衝突しないようにするために、jQuery を IIFE に渡すことをお勧めします。 (即時呼び出し関数式) ドル記号にマップするため、実行範囲内で別のライブラリによって上書きされることはありません。」

コード例は次のとおりです。

(function( $ ) {
    $.fn.myPlugin = function() {

        // Do your awesome plugin stuff here

    };
})( jQuery );

私の質問は、IIFE が必要な理由と、IIFE なしで発生する可能性のある衝突の例をいくつか教えてください。実行時に、$ パラメータは Jquery グローバル変数に置き換えられるため、IIFE によってグローバル変数が変更されます。私には、これは以前と同じように衝突の可能性が高いことを示唆しているように思えます。私はここで何かが欠けていることを知っています。ご協力いただきありがとうございます。

4

2 に答える 2

1

シンボルは、prototypeMooTools$などの他のライブラリによってグローバル変数として使用されます。したがって、グローバル変数は jQuery を参照しない場合があります。これが、jQuery の noConflict メソッドが存在する理由です。$

そのため、jQuery に加えてプロトタイプまたは MooTools を使用するページでプラグインを使用する場合、それが jQuery を参照しているとは確信できませんが、変数が$参照することは想定できます。jQueryプラグインを作成している場合は、他のユーザーができるだけ簡単に使用できるようにしたいと考えています。したがって、他のライブラリとシームレスに使用できるようにする必要があります。

IIFE を使用すると、この安全性を確保しながら$、コードで使用する利便性を維持できます。jQuery代わりに参照を使用してjQueryライブラリを常に参照することに$問題がない場合は、IIFEは不要です。

于 2012-06-23T18:11:54.830 に答える
0

他のライブラリが$グローバル変数を「盗む」と想像してください(独自のライブラリオブジェクトをそれに割り当てることにより):

$ = otherLibrary;

現在、$その他のライブラリを参照していますが、jQuery(これもグローバル変数です) は引き続き jQuery ライブラリを参照しています。

プラグインが次のように記述されている場合:

$.fn.myPlugin = function () { ... };

$.fnjQuery ライブラリを参照しなくなったため、jQuery のオブジェクトには割り当てられ$ません。

ただし、プラグインが次のように記述されている場合:

(function ( $ ) {
    $.fn.myPlugin = function () { ... };
}( jQuery ));

$.fn(ローカル) 引数$はグローバル変数への参照であるため、 jQuery のオブジェクトに割り当てられますjQuery

そう:

$ === jQuery // false

(function ( $ ) {

    $ === jQuery // true

    $.fn.myPlugin = function () { ... };

}( jQuery ));

$ === jQuery // false

引数$は、グローバル変数(他のライブラリを参照する) を隠しています。$

于 2012-06-23T18:14:07.383 に答える