2011-09-12 13 views
2

この記事はmodule Javascript patternについて読んでいましたが、「グローバルインポート」のメリットは何か分かりません。違いは何ですか匿名閉鎖とグローバルインポート

(function() { 

    alert($('#theForm').attr('method')); 

}()); 

(function ($) { 

    alert($('#theForm').attr('method')); 

} (jQuery)); 

どちらの方法でも、同じ効果を持っているので、私は、私はここでのポイントをしないのですね。

匿名クロージャのパラメータとして渡すグローバル変数のポイントは何ですか?メリットは何ですか?

答えて

7

スクリプト(PrototypeやMootoolsなど)がたくさんある場合は、$文字も使用します。したがって、その文字をグローバルレベルで使用しないと便利なことがあります。これは、jQuery.noConflict()を使用してjQueryで行うことができます。その後、jQueryの選択などを行うにはjQueryを使用する必要があります。

ただし、jQueryのみを使用するコードセクション(おそらく「モジュール」)がある場合は、そのパターンを使用してコードセクションに対して$を再定義することができます。関数外jQueryとして知られているオブジェクトについて、関数内部$として知られている:

(function($) { // the first parameter is known as $ 
    // inside the function, you can access jQuery by the name $ 
}(jQuery)); // pass jQuery as the first argument 
+0

ありがとうございました。 – vtortola

2

2番目のバージョンでは、jqueryにドル記号$を使用することができます。それ以外の場合は、別名(プロトタイプなど)としてドル記号も使用する2番目のjavascriptライブラリをインポートすると、問題が発生する可能性があります。

したがって、2番目のバージョンでは、一意の名前(この場合はjQuery)を渡すことによって常に競合が発生しないようにします。

+0

ありがとうございました:) – vtortola

0

簡略化した例では、これは次のようになるであろう説明します。

var jqueryCloneLibrary = {libName : 'jqClone_1.1.1',size : '4kb'}; // 
(function(_){console.log(_.libName,_.size)}(jqueryCloneLibrary)) 

の上には、グローバルレベルでのクローンはvar jqueryCloneLibraryの基準と宣言されて記憶されています。

jqueryCloneLibraryすなわちオブジェクトへの参照

は、関数定義内 IIFE (immediately invoked function)

に引数として渡され、私たちは_として定義されたパラメータは、我々はプロパティ_.name_.sizeにアクセスすることが可能である使用しています。

同様の方法でjqueryやその他のライブラリをインクルードします。これはグローバルインポートと呼ばれます。