2010-10-27 8 views

Respuesta

8

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

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

Para ilustrar mejor esto.

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

En este caso, myQuery contiene el valor Hello. Ahora bien, si usted tenía:

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

myQuery contiene una referencia a la función. Si utilizó console.log en Firebug para generar este valor, verá function(). Esta referencia es algo que puede pasar o incluso invocar. Por lo tanto:

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

var value = myQuery(); 

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

+0

¡Gracias por tu ayuda! –

+2

@Randy: También tenga en cuenta que en el segundo caso no necesita el paréntesis que lo rodea, por lo que 'var myQuery = function() {...};' será el mismo. –

+0

@Marcel Olvidé señalar eso también. Gracias :) –

0

La primera es una función de auto-invocando, llamado con una lista de parámetros vacía. El valor de myQuery será lo que devuelva esta función.

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

4

Simplificaré Function #2 y quizás eso muestre mejor las diferencias.

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

En la Función n. ° 2, está diciendo "Asignar a myQuery una referencia a esta función". En la función n. ° 1, dice "Asignar a myQuery el valor de una llamada a esta función".

+0

Ustedes son bienvenidos. – Kivin

Cuestiones relacionadas