¿Cuál es la diferencia entre estas funciones? ¡Gracias por responder!Funciones de invocación automática en JavaScript
Función # 1
var myQuery = (function() {
(...)
})();
Función # 2
var myQuery = (function() {
(...)
});
¿Cuál es la diferencia entre estas funciones? ¡Gracias por responder!Funciones de invocación automática en JavaScript
Función # 1
var myQuery = (function() {
(...)
})();
Función # 2
var myQuery = (function() {
(...)
});
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.
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.
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".
Ustedes son bienvenidos. – Kivin
así la primera función se ejecuta como se pasa la línea y la segunda tendrá que ser ejecutado para obtener el valor
¡Gracias por tu ayuda! –
@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. –
@Marcel Olvidé señalar eso también. Gracias :) –