1

$(function() { ...here... });時々人々が彼らのブロックの中にたくさんの呼び出し可能な関数を置くことに気づきました。理由は疑問に思いましたが、考えられる理由に気づきました。2つのオブジェクトが異なるjQueryコードブロックにある場合、名前の衝突は問題にならないようです。

私の考えは正しいですか?これは大きな利点のようです。

しかし、このアプローチを採用したので、関数の1つを他のjQueryコードブロックから呼び出し可能にする必要があります。したがって、関数をコードブロックの外に移動することはできますが、コードブロック内の他の関数を呼び出す必要があります。

それで、すべての関数をコードブロックの外に移動する必要がありますか、それともこの分離を維持しながら、別のコードブロックから関数の1つを呼び出すことができる方法はありますか?

4

2 に答える 2

1

モジュールパターンを読んでください。これがあなたのための小さな例です:

window.Namespace = window.Namespace || {}; //defining our namespace

Namespace.Module = (function(){
   var api = {};

   var func = function() { //private function, accessible only inside this module

   };

   api.publicfunc = function() { // public function

   };

   return api; //all api functions will be available globally
})();
于 2013-01-17T03:15:13.613 に答える
1

彼らがjQueryのdocument.readyショートカットを使用しているという事実は、変数(または関数)が無名関数によって作成されたクロージャーの内部にあるという事実と同様に、変数を定義するための問題ではありません。

`function(){}`

そうです、これは主にグローバル名前空間の汚染を避けるために行われます。また、範囲外になると、ガベージコレクターがそこにあったものの一部を収集できる可能性があることを期待して行われます(範囲外であるため)。

グローバル変数が必要な場合は、問題はありません。可能な限り制限するようにしてください。レディブロックの内側から必要な場合は、外側で定義し、内側で参照します。

var MyGlobalObj_guid52z = {};
$(function(){
 MyGlobalObj_guid52z.MyFunction = function(){
  //do what you want in here
 };
});
//and later you can do this
MyGlobalObj_guid52z.MyFunction();
于 2013-01-17T03:16:20.507 に答える