javascript - script - ¿Hay una diferencia entre(función(){...}()); y(función(){...})();?
pasar variables entre funciones javascript (3)
En cuanto a las diferencias, en realidad es solo azúcar sintáctico. Algo equivalente a: "¿te gusta jQuery () o $ ()?" Ambos se pueden compilar, ejecutar y usar indistintamente (AFAIK).
De las muestras de código que he visto hasta ahora, parece que más personas siguen la convención del código de Crockford:
(function() { ... }());
Personalmente, prefiero la (function(){})();
convención porque es más evidente para mí que la función es autoejecutable; También soy un gran usuario de jQuery y esa es la convención utilizada en jQuery source.
Además, se considera una buena práctica utilizar parens para encerrar su función de autoejecución, independientemente de la forma que elija.
Posible duplicado:
¿Ubicación de paréntesis para funciones de JavaScript anónimas de ejecución automática?
A veces veo:
(function() { ... }());
y a veces veo:
(function() { ... })();
Veo ambas formas con y sin argumentos. Ambos execute la función anónima.
¿Hay alguna diferencia entre las dos formas? ¿Hay alguna razón convincente para usar una forma sobre la otra?
No existe una diferencia práctica en esas dos formas, pero desde un punto de vista gramatical la diferencia entre las dos es que The Grouping Operator - los paréntesis - mantendrá en el primer ejemplo una CallExpression
, que incluye FunctionExpression
:
CallExpression | | FunctionExpression | | | V V (function() { }()); ^ ^ |--PrimaryExpression --|
En el segundo ejemplo, tenemos primero una CallExpression
completa, que contiene FunctionExpression
:
PrimaryExpression | FunctionExpression | V (function() { })(); ^ ^ |-- CallExpression --|
No hay diferencia entre los dos, en lo que respecta al compilador. Sin embargo, encontrará que el estilo (function () {}())
se recomienda en las convenciones de código de JavaScript de Douglas Crockford.