Jaka jest różnica między tymi dwoma:Znak dolara przed samodzielnym zadeklarowaniem anonimowej funkcji w JavaScript?
$(function() {
// do stuff
});
I
(function() {
// do stuff
})();
Jaka jest różnica między tymi dwoma:Znak dolara przed samodzielnym zadeklarowaniem anonimowej funkcji w JavaScript?
$(function() {
// do stuff
});
I
(function() {
// do stuff
})();
Pierwsza wykorzystuje jQuery do powiązania funkcji ze zdarzeniem document.ready
. Drugi deklaruje i natychmiast wykonuje funkcję.
jeden jest funkcja jQuery $(document).ready
a druga jest tylko anonimowa funkcja, która nazywa siebie.
$(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.
* Samodzielne wykonywanie anonimowych funkcji –
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
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.
$(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
})();
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
@ 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. –