Funciones de invocación automática en JavaScript

¿Cuál es la diferencia entre estas funciones? ¡Gracias por responder!

Función n. ° 1

var myQuery = (function() { (...) })(); 

Función n. ° 2

 var myQuery = (function() { (...) }); 

En el primer caso, invoca automáticamente un literal de function y asigna el valor de la invocación a la variable myQuery .

En el segundo caso, está asignando una reference a la function anónima que ha definido. Aquí, myQuery actúa como un puntero o una reference a una function.

Para ilustrar mejor esto.

 var myQuery = (function() { return "Hello"; })(); 

En este caso, myQuery contiene el valor Hello . Ahora si tuvieras:

 var myQuery = (function() { return "Hello"; }); 

myQuery contiene una reference a la function. Si utilizó console.log en Firebug para generar este valor, vería function() . Esta reference es algo que puede pasar o incluso invocar. Asi que:

 var myQuery = (function() { return "Hello"; }); var value = myQuery(); 

Ahora, el value contendrá Hello . Espero que esto explique la diferencia.

Simplificaré la Function #2 y tal vez eso muestre mejor las diferencias.

 var myQuery = function(){ (...) }; 

En la Función # 2, dices "Asignar a myQuery una reference a esta function". En la Función n. ° 1, dice "Asignar a myQuery el valor de una llamada a esta function".

La primera es una function autoinvocada, llamada con una list de parameters vacía. El valor de myQuery será lo que devuelva esta function.

El segundo es simple asignación de una function anónima. No hay invocación en este.

así la primera function se ejecuta a medida que se pasa la línea y la segunda tendrá que ejecutarse para get el valor

Por ejemplo: http://jsfiddle.net/yVrwX/