私は「人々が自分の中にたくさんの呼び出し可能な関数を置くことが時々気づいた。 $(function() { ...here... });
ブロック。 2つのオブジェクトが別々のjQueryコードブロック内にある場合、命名の衝突は問題にならないようです。
私の考えは正しいですか?これは大きな利点のようです。
しかし、私はこのアプローチを取ったので、私の関数の1つを他のjQueryコードブロックから呼び出し可能にする必要があります。だから私はコードブロックの外側に関数を移動することができますが、それはコードブロックの内側に他の関数を呼び出す必要があります。
それで、私は自分のすべての関数をコードブロックの外側に移動する必要があるか、それともこの分離を保ちながら他のコードブロックから自分の関数の1つを呼び出すことができる方法がありますか?
回答:
回答№1は1彼らがjQueryの文書を使っているという事実。変数(または関数)が無名関数によって作成されたクロージャーの中にあるという事実と同じくらい、すぐに使えるショートカットは実際には変数を定義するための問題ではありません
`function(){}`
そう、これは主にグローバル名前空間の汚染を避けるために行われます。また、一度範囲外になると、ガベージコレクタが削除されます。 かもしれない そこにあったもののいくらかを集めることができる(それが範囲外であるので)。
グローバル変数を使いたい場合は、それでも問題はありません。できるだけそれらを制限するようにしてください。 readyブロックの内側から必要な場合は、外側を定義してその内側を参照してください。
var MyGlobalObj_guid52z = {};
$(function(){
MyGlobalObj_guid52z.MyFunction = function(){
//do what you want in here
};
});
//and later you can do this
MyGlobalObj_guid52z.MyFunction();
回答№2の場合は1
Moduleパターンを読んでください。これはあなたのための小さな例です:
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
})();