Punto y coma para seguridad en IIFE
Supongamos ahora que nuestra función inmediatamente invocada no comienza con un signo más, sino que está envuelta entre paréntesis, así:
(function() {
console.log(1); // mostrará 1
})();
Supongamos que la variable num se define fuera
de la función:
let num = 1; // el punto y coma está puesto
(function() {
console.log(num); // mostrará 1
})();
Supongamos ahora que olvidamos poner el punto y coma:
let num = 1
(function() {
console.log(num); //!! dará un error
})();
Resulta que tal código dará un error, ya que JavaScript percibe nuestra función como una continuación del comando de la primera línea.
Para evitar tales problemas, antes de invocar una función inmediatamente, siempre es necesario poner un punto y coma, así:
let num = 1
;(function() {
console.log(num); // mostrará 1
})();
Puede parecer que el problema es algo artificial. En realidad, no es así. Puede darse una situación en la que tengas varios scripts conectados desde archivos separados en tu página. En este caso, al final de un archivo podría faltar un punto y coma y esto automáticamente conducirá a un problema si el segundo archivo comienza con la invocación de una función inmediata.
Por lo tanto, siempre, siempre pon un punto y coma antes de invocar una función inmediata, incluso si estás seguro en este momento de que no habrá problemas. Estos pueden surgir después.
Apliquemos lo dicho anteriormente e invoquemos la función inmediata, poniendo un punto y coma al principio:
;(function() {
console.log(1); // mostrará 1
})();
Determina, sin ejecutar el código, qué se mostrará en la consola:
let str = 'str';
(function() {
console.log(1);
})();
Determina, sin ejecutar el código, qué se mostrará en la consola:
let str = 'str'
(function() {
console.log(1);
})();