2011-09-28 12 views
5

Il codice JS su alcuni siti vedo codice Javascript come questo:Cos'è questo codice in Javascript?

SomeName.init = (function() { 
    // some stuff 
})(); 

Voglio dire, questo non è un codice del plugin jQuery come questo:

(function($){ 
    $.fn.myPlugin = function() { 

    // Do your awesome plugin stuff here 

    }; 
})(jQuery); 

Allora, che cos'è ? e qual è l'oggetto JS risultante?

+0

Io ... non sono sicuro di cosa stai chiedendo. Entrambi gli snippet mostrano una funzione dichiarata ed eseguita. Oltre a ciò, non sembrano correlati. –

+0

Il primo sta impostando i risultati di una funzione anonima in una variabile denominata "init". E come si vede nel 2 ° esempio, la funzione anonima è un modello di progettazione spesso utilizzato nella creazione di PLUG-IN (o moduli) e viene spesso chiamato il "Pattern modulo". –

+0

[Ecco cosa ho trovato] (http://stackoverflow.com/questions/5101638/what-does-this-javascript-code-mean) quando ho digitato il tuo titolo nella casella di ricerca. – user113716

risposta

2

Il Module Pattern. E quei due frammenti hanno più in comune di quanto pensi.

8

È una funzione anonima, che non perde le variabili nell'ambito globale quando si dichiarano le variabili utilizzando var.

SomeName.init = (function() { 
    return 3.1415; 
})(); 

SomeName.init è un numero (3.1415), perché () dopo la dichiarazione funzione anonima esegue la funzione. Non c'è modo per ottenere la funzione originale, a meno definito all'interno della funzione anonima:

(function foo(){ 
    //foo refers to this function 
    too = foo; 
})();; 
//foo is undefined 
//too refers to the function, because `too` has been defined without var 
0

Qualsiasi sia la funzione restituita.

(function() { 
    //... 
})(); 

Viene utilizzato come un modo per il codice dello spazio dei nomi o per dichiarare i costruttori autoesecutivi. L'oggetto risultante è ciò che restituisce la funzione autoeseguibile.

Il secondo frammento non restituisce nulla e non c'è resulting JS object.

1
(function() { 
    // some stuff 
})() 

è una funzione anonima che si chiama istantaneamente. È solo una chiusura attorno al codice interno per impedire che l'ambito delle variabili diventi globale.