2010-10-27 12 views

risposta

8

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.

+0

Grazie per il vostro aiuto! –

+2

@Randy: Si noti anche che nel secondo caso non è necessario che le parentesi siano vicine, quindi 'var myQuery = function() {...};' sarà lo stesso. –

+0

@ Marcel Ho dimenticato di farlo notare. Grazie :) –

0

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.

4

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".

+0

Siete i benvenuti. – Kivin

0

bene la prima funzione esegue come è passata la linea e il secondo dovrà essere eseguito per ottenere il valore

Esempio: http://jsfiddle.net/yVrwX/

Problemi correlati