write ubicar sirve script qué que por para nuestro justo invoca hace función funcion forma externo etiqueta ejemplo desde debemos cierre body archivo antes javascript syntax jslint iife

javascript - sirve - ¿por qué debemos ubicar la etiqueta<script> justo antes de que se cierre el<body>?



Sintaxis de invocación de función inmediata (3)

Existe una opción JSLint , una de las partes buenas de hecho, que "[requiere] parens en torno a invocaciones inmediatas", lo que significa que la construcción

(function () { // ... })();

en su lugar necesitarí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 el primer formulario?

Desde que hice esta pregunta, he llegado a comprender la importancia de tener una clara distinción visual entre los valores de las funciones y los valores de las funciones. Considere el caso donde 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 proporciona una indicación inicial de que el valor que se está asignando 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 de constructor: está destinado a servir como una señal visual para cualquiera que mire el código fuente.


De la guía de convenciones de estilo de Douglass Crockford: (busque "invocado inmediatamente")

Cuando una función se va a invocar inmediatamente, toda la expresión de invocación debe envolverse en parens para que quede claro que el valor que se produce es el resultado de la función y no de la función en sí.

Entonces, básicamente, él siente que hace más clara la distinción entre los valores de función y los valores de las funciones. Entonces, es una cuestión estilística, no una diferencia sustantiva en el código en sí.

referencia actualizada, el PPT anterior ya no existe


Las funciones anónimas llamadas inmediatamente se envuelven en parens porque:

  1. Son expresiones de funciones y el hecho de dejar paréntesis haría que se interpretara como una declaración de función que es un error de sintaxis.

  2. Las expresiones de función no pueden comenzar con la función de palabra.

  3. Al asignar la expresión de función a una variable, la función en sí misma no se devuelve, se devuelve el valor de retorno de la función , de ahí que los parens evalúen qué hay dentro de ellos y producen un valor. cuando la función se ejecuta, y los paréntesis finales ..}() hacen que la función se ejecute inmediatamente.


O usar:

void function () { ... } ()