Qual è la differenza tra questi due:Il simbolo del dollaro prima dell'autenticazione della funzione anonima in JavaScript?
$(function() {
// do stuff
});
E
(function() {
// do stuff
})();
Qual è la differenza tra questi due:Il simbolo del dollaro prima dell'autenticazione della funzione anonima in JavaScript?
$(function() {
// do stuff
});
E
(function() {
// do stuff
})();
Il primo utilizza jQuery per associare una funzione all'evento document.ready
. Il secondo dichiara e esegue immediatamente una funzione.
uno è una funzione jQuery $(document).ready
e l'altro è solo una funzione anonima che si chiama.
$(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.
* funzione anonima autoeseguibile –
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
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.
$(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
})();
Ah ok, quindi la differenza principale è che il secondo non aspetta che il documento finisca il caricamento, e si esegue immediatamente? – xil3
@ 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. –