2011-09-30 18 views

risposta

43

Il primo utilizza jQuery per associare una funzione all'evento document.ready. Il secondo dichiara e esegue immediatamente una funzione.

+0

Ah ok, quindi la differenza principale è che il secondo non aspetta che il documento finisca il caricamento, e si esegue immediatamente? – xil3

+3

@ xil3 - corretto. Il primo è appropriato se la funzione deve modificare il DOM. Il secondo è utile se hai solo bisogno degli effetti del JS. Raramente i due sono intercambiabili, ma in genere il primo è preferibile perché la maggior parte del codice jQuery viene utilizzato per manipolare elementi DOM. –

4

uno è una funzione jQuery $(document).ready e l'altro è solo una funzione anonima che si chiama.

+0

La funzione jquery ready non funge da chiusura? – xil3

+1

Questo non è in realtà una chiusura. Solo una funzione anonima autoinvitante. Nessuna delle due è una chiusura. Vedi: http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – gilly3

20

$(function() {}); è una scorciatoia per jQuery

$(document).ready(function() { 
    /* Handler for .ready() called. */ 
}); 

Mentre (function() {})(); è un'espressione della funzione immediatamente invocato, o IIFE. Ciò significa che è un'espressione (non un'istruzione) e viene richiamata immediatamente dopo la sua creazione.

+1

* funzione anonima autoeseguibile –

+8

Preferirei vederli chiamati "immediatamente richiamati" piuttosto che "autoattentati" o " auto-invocazione". Ad esempio, '(function() {arguments.callee()})()' sarebbe una "auto esecuzione/invocazione di una funzione anonima" mentre '(function() {})()' è solo una funzione anonima che viene invocata subito. Vedi: http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife – nwellcome

3

Sono entrambe funzioni anonime, ma viene chiamato immediatamente (function(){})() e $(function(){}) viene chiamato quando il documento è pronto.

jQuery funziona in questo modo.

window.jQuery = window.$ = function(arg) { 
    if (typeof arg == 'function') { 
     // call arg() when document is ready 
    } else { 
     // do other magics 
    } 
} 

Quindi stai solo chiamando la funzione jQuery e passando una funzione, che verrà richiamata sul documento pronto.

La "funzione anonima autoeseguita" è la stessa di questa operazione.

function a(){ 
    // do stuff 
} 
a(); 

L'unica differenza è che non si sta inquinando lo spazio dei nomi globale.

0
$(function() { 
    // It will invoked after document is ready 
}); 

Questa esecuzione funzione una volta che i documenti pronti media, l'intero HTML dovrebbe avere caricato prima della sua esecuzione, ma nel secondo caso, la funzione di richiamata immediatamente dopo la creazione.

(function() { 
    // It will invoked instantly after it is created 
})(); 
Problemi correlati