2010-05-28 37 views
23

Le seguenti ipotesi sono accurate?significato della dichiarazione anonima jquery

1) eseguire immediatamente

(function(){ 
})(); 

2) eseguire il documento pronto

$(document).ready(function(){ 
}); 

3) scorciatoia per il documento pronto

$(function(){ 
}); 

4) scorciatoia alternativa a sul documento pronto per evitare conflitti tra script di script

(function($) { 
})(jQuery); 
+1

L'ultimo viene spesso utilizzato per definire i plug-in. –

+0

Modificato la numerazione per dargli una formattazione del codice più gradevole, markdown non ama il codice direttamente sotto i numeri per qualsiasi motivo :) –

+0

Cheers Nick, bella –

risposta

19

Sì tue definizioni sono corrette, per i primi 3 :)

Anche se, a meno che non hai bisogno di una chiusura, una dichiarazione eseguirà immediatamente, nessuna ragione per avvolgerlo come # 1 ha (ci sono sicuramente un sacco di tempi validi hai bisogno di una chiusura, basta notare se non lo fai ... è superfluo).

Numero 4, tuttavia, non è corretto, (function($) { })(jQuery); non è legato ad alcun evento, è solo una chiusura in modo che $ === jQuery all'interno di esso, in modo da poter usare la scorciatoia $:

(function($) { 
    //You may use $ here instead of jQuery and it'll work...even if $ means 
    //something else outside of this closure, another library shortcut for example 
})(jQuery); 
+0

Risposta molto informativa. Il numero 4 è usato principalmente nel caso in cui $ sia stato sovrascritto nello scope globale da quando è stato caricato il file jQuery? –

+4

@ yaya3 - Sì, di solito come risultato di ['.noConflict()'] (http://api.jquery.com/jQuery.noConflict/) per lasciare che un'altra libreria controlli '$'. Tuttavia, se si desidera 'document.ready' e nessun conflitto, c'è anche una versione breve, jQuery passa se stesso come parametro al gestore pronto in modo' jQuery (document) .ready (function ($) {}); 'oppure il più breve 'jQuery (function ($) {});' sta ottenendo '$' passato, più locale quindi' $ === jQuery' anche all'interno ... e il codice viene attivato su 'document.ready', bello e pulito. O usa qualsiasi altro nome :), ad es. 'jQuery (function (myVar) {myVar ('# myElem'). hide();});' –

+0

Impressionante, ho imparato molto qui. Grazie –

9

Ecco il # 4 si erano alla ricerca di:

jQuery(function ($) { 
}); 

sarà eseguito su document.ready, all'interno di uno spazio dei nomi, e con jQuery definita da $.

+0

brillante modo di scrivere questo che ci darà il potere di $ senza il rovescio della medaglia. – rncrtr

Problemi correlati