2011-09-30 10 views

Odpowiedz

43

Pierwsza wykorzystuje jQuery do powiązania funkcji ze zdarzeniem document.ready. Drugi deklaruje i natychmiast wykonuje funkcję.

+0

No dobrze, więc główna różnica polega na tym, że drugi nie czeka na zakończenie ładowania dokumentu, i po prostu wykonuje natychmiast? – xil3

+3

@ xil3 - poprawne. Pierwsza jest odpowiednia, jeśli funkcja musi zmodyfikować DOM. Drugi jest przydatny, jeśli potrzebujesz efektów JS. Rzadko są one wymienne, ale zazwyczaj pierwsze z nich jest lepsze, ponieważ większość kodu jQuery służy do manipulowania elementami DOM. –

4

jeden jest funkcja jQuery $(document).ready a druga jest tylko anonimowa funkcja, która nazywa siebie.

+0

Funkcja gotowa do jQuery nie działa jako zamknięcie? – xil3

+1

To nie jest właściwie zamknięcie. Tylko anonimowa funkcja samozwańcza. Żadna z nich nie jest zamknięta. Zobacz: http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – gilly3

20

$(function() {}); jest skrót jQuery dla

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

Podczas (function() {})(); jest wywoływana natychmiast wyrażenie funkcji lub Iife. Oznacza to, że jest ono wyrażeniem (a nie instrukcją) i jest wywoływane natychmiast po jego utworzeniu.

+1

* Samodzielne wykonywanie anonimowych funkcji –

+8

Wolałbym, aby były nazwane "natychmiast wywoływane", a nie "sam wykonujące" lub " samoodwracający się ". Na przykład '(function() {arguments.callee()})()' byłoby "samodzielnym wykonywaniem/wywoływaniem funkcji anonimowej", podczas gdy '(function() {})()' jest po prostu anonimową funkcją, która jest wywoływana natychmiast. Zobacz: http://benalman.com/news/2010/11/immediately-invoked-function-expression/#iife – nwellcome

3

Oba funkcje są anonimowe, ale (function(){})() jest wywoływany natychmiast, a $(function(){}) jest wywoływane, gdy dokument jest gotowy.

jQuery działa podobnie.

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

Po prostu wywołujesz funkcję jQuery i przekazujesz funkcję, która będzie wywoływana na gotowym dokumencie.

"Funkcja samorozpoczania anonimowego" jest taka sama jak ta.

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

Jedyna różnica polega na tym, że nie zanieczyszcza się globalnej przestrzeni nazw.

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

Ta funkcja wykonanie raz dokumentów przygotować średnią, cała HTML powinien dostać załadowany przed jego wykonaniem, ale w drugim przypadku, funkcja wywoływana natychmiast po jego utworzeniu.

(function() { 
    // It will invoked instantly after it is created 
})(); 
Powiązane problemy