/ / Otázky týkajúce sa organizácie funkcií jQuery v rámci jednej funkcie - javascript, jquery

Otázky o organizácii funkcií jQuery v rámci jednej funkcie - javascript, jquery

Niekedy som si všimol, že ľudia do seba vkladajú množstvo volacích funkcií $(function() { ...here... }); blok. Čudoval som sa prečo, ale potom som si všimol možný dôvod: kolízie pomenovania sa nezdajú byť znepokojujúce, ak sú tieto dva objekty v rôznych blokoch kódu jQuery.

Je moje myslenie správne? Zdá sa, že to je veľká výhoda.

Ale teraz, keď som zaujal tento prístup, mámpotrebujem, aby jedna z mojich funkcií bola volaná z iných blokov kódu jQuery. Takže môžem presunúť funkciu mimo blok kódu, ale musí zavolať ďalšie funkcie do bloku kódu.

Musím teda presunúť všetky svoje funkcie mimo blok kódu, alebo existuje spôsob, ako udržať toto oddelenie, ale napriek tomu byť schopný zavolať jednu z mojich funkcií z iného bloku kódu?

odpovede:

1 pre odpoveď č. 1

Skutočnosť, že používajú dokument jQuery.pripravená skratka nie je v skutočnosti ani tak problém pri definovaní premenných, ako skôr skutočnosť, že premenné (alebo funkcie) sú vo vnútri uzáveru vytvoreného anonymnou funkciou

`function(){}`

Áno, robí sa to predovšetkým preto, aby sa zabránilo znečisťovaniu globálneho priestoru názvov. Tiež sa to robí s nádejou, že keď už bude mimo dosahu, zberač odpadu smieť byť schopný zozbierať niečo z toho, čo tam bolo (pretože to nepatrí do rozsahu pôsobnosti).

Ak chcete mať globálnu premennú, existujena tom nie je nič zlé, len sa ich snažte čo najviac obmedziť. Ak ho potrebujete z vnútra pripraveného bloku, definujte ho zvonku a odkazujte na to vo vnútri.

var MyGlobalObj_guid52z = {};
$(function(){
MyGlobalObj_guid52z.MyFunction = function(){
//do what you want in here
};
});
//and later you can do this
MyGlobalObj_guid52z.MyFunction();

1 pre odpoveď č. 2

Mali by ste si prečítať vzor modulu. Tu je malý príklad pre vás:

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
})();