Hay una opción JSLint , una de las partes buenas de hecho, que "[requiere] parens alrededor de invocaciones inmediatas", lo que significa que la construcción
(function () {
// ...
})();
en su lugar, debería escribirse como
(function () {
// ...
}());
Mi pregunta es esta: ¿alguien puede explicar por qué esta segunda forma podría considerarse mejor? ¿Es más resistente? ¿Menos propenso a errores? ¿Qué ventaja tiene sobre la primera forma?
Desde que hice esta pregunta, he llegado a comprender la importancia de tener una distinción visual clara entre los valores de las funciones y los valores de las funciones. Considere el caso en el que el resultado de la invocación inmediata es el lado derecho de una expresión de asignación:
var someVar = (function () {
// ...
}());
Aunque los paréntesis más externos son sintácticamente innecesarios, el paréntesis de apertura da una indicación inicial de que el valor que se asigna no es la función en sí, sino el resultado de la función que se invoca.
Esto es similar al consejo de Crockford con respecto a la capitalización de las funciones del constructor: está destinado a servir como una pista visual para cualquiera que esté mirando el código fuente.