/ / Domande sull'organizzazione di funzioni jQuery in una singola funzione - javascript, jquery

Domande sull'organizzazione di funzioni jQuery in una singola funzione - javascript, jquery

Ho notato che a volte le persone mettono in campo un certo numero di funzioni chiamabili $(function() { ...here... }); bloccare. Mi sono chiesto perché, ma poi ho notato una possibile ragione: le collisioni di nomi non sembrano preoccupanti se i due oggetti si trovano in diversi blocchi di codice jQuery.

Il mio pensiero è corretto? Questo sembrerebbe essere un grande vantaggio.

Ma ora che ho preso questo approccio, ho ilè necessario rendere una delle mie funzioni chiamabili da altri blocchi di codice jQuery. Quindi posso spostare la funzione al di fuori del blocco di codice, ma è necessario chiamare altre funzioni all'interno del blocco di codice.

Quindi devo spostare tutte le mie funzioni al di fuori del blocco di codice o esiste un modo per mantenere questa separazione, ma è ancora possibile chiamare una delle mie funzioni da un altro blocco di codice?

risposte:

1 per risposta № 1

Il fatto che stiano usando il documento di jQuery.la scorciatoia pronta non è tanto un problema per la definizione delle variabili, quanto il fatto che le variabili (o le funzioni) sono all'interno di una chiusura creata dalla funzione anonima

`function(){}`

Quindi sì, questo è fatto principalmente per evitare di inquinare lo spazio dei nomi globale. Si fa anche con le speranze che una volta fuori dal campo di applicazione, il garbage collector potrebbe essere in grado di raccogliere parte di ciò che era lì dentro (dato che è fuori portata).

Se vuoi avere una variabile globale, c'ènon c'è niente di sbagliato in questo, cerca solo di limitarli il più possibile. Se ne hai bisogno dall'interno del blocco pronto, basta definirlo all'esterno e riferirlo all'interno.

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

1 per risposta № 2

Dovresti leggere il modello del modulo. Ecco un piccolo esempio per te:

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