khellang/iffe.md

Si no te importa el valor de retorno del IIFE, podría ser cualquiera de los siguientes:

!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN

Exploremos esto un poco más.

Ambos funcionan igual. Empieza a ser interesante cuando a uno de los módulos le falta un punto y coma al final:

Con un punto y coma faltante, cada conjunto de paréntesis está tratando de invocar inmediatamente la expresión precedente. Ese sería el valor de retorno de la IIFE precedente.

Así que la diferencia es cuando se produce el TypeError. Vamos a comprobar lo que los argumentos son. Observa que console.log() devuelve undefined:

Ahora hagamos ese mismo ejemplo con la forma crockford:

Pero espera, aquí no hay TypeError…

No hay TypeError por la función devuelta. La función devuelta que registra los argumentos está siendo invocada con el valor de retorno de module2, que es indefinido.Con ese entendimiento, volvamos al ejemplo original, donde había un TypeError:

Conclusión

Los IIFEs (function{})(); y (function(){}()); pueden actuar de manera diferente en la situación de falta de punto y coma.

Utilice el linter o una herramienta para asegurarse de que no faltan puntos y comas al final de los módulos cuando trabaje con ellos.

Para estar más seguro, añada un punto y coma inicial al IIFE:

Deja una respuesta

Tu dirección de correo electrónico no será publicada.