Qual è la differenza tra queste funzioni? Grazie per la risposta!Funzioni di auto-richiamo in JavaScript
Funzione # 1
var myQuery = (function() {
(...)
})();
Funzione # 2
var myQuery = (function() {
(...)
});
Qual è la differenza tra queste funzioni? Grazie per la risposta!Funzioni di auto-richiamo in JavaScript
Funzione # 1
var myQuery = (function() {
(...)
})();
Funzione # 2
var myQuery = (function() {
(...)
});
Nel primo caso, si sta richiamando automaticamente una funzione letterale e assegnando il valore dell'invocazione alla variabile myQuery
.
Nel secondo caso, si assegna un riferimento alla funzione anonima che è stata definita. Qui, myQuery
si comporta come un puntatore o un riferimento a una funzione.
Per illustrare meglio questo.
var myQuery = (function() {
return "Hello";
})();
In questo caso, myQuery
contiene il valore Hello
. Ora, se si ha:
var myQuery = (function() {
return "Hello";
});
myQuery
contiene un riferimento alla funzione. Se hai usato console.log
in Firebug per stampare questo valore, vedresti function()
. Questo riferimento è qualcosa che puoi trasmettere o persino invocare. Quindi:
var myQuery = (function() {
return "Hello";
});
var value = myQuery();
Ora, value
conterrà Hello
. Spero che questo spieghi la differenza.
La prima è una funzione di auto-invocando, chiamato con una lista di parametri vuoto. Il valore di myQuery sarà ciò che restituisce questa funzione.
Il secondo è la semplice assegnazione di una funzione anonima. Non c'è invocazione in questo.
Mi semplificherò Function #2
e forse questo mostrerà meglio le differenze.
var myQuery = function(){ (...) };
Nella funzione n. 2, stai dicendo "Assegna myQuery come riferimento a questa funzione". Nella funzione n. 1, stai dicendo "Assegna a myQuery il valore di una chiamata a questa funzione".
Siete i benvenuti. – Kivin
bene la prima funzione esegue come è passata la linea e il secondo dovrà essere eseguito per ottenere il valore
Esempio: http://jsfiddle.net/yVrwX/
Grazie per il vostro aiuto! –
@Randy: Si noti anche che nel secondo caso non è necessario che le parentesi siano vicine, quindi 'var myQuery = function() {...};' sarà lo stesso. –
@ Marcel Ho dimenticato di farlo notare. Grazie :) –