Las funciones anónimas autoejecutables son un patrón muy importante y utilizado para la ejecución de código. Es una función en la cual englobamos todo el código que queremos ejecutar. Este patrón fue muy utilizado porque creábamos una encapsulación de nuestro código.
Se llaman anónimas autoejecutables porque no sólo las definimos sino también las estamos ejecutando en el momento de crearlas, y, como su nombre dice, no tienen nombre, cuando se carga la programación de la página, se ejecuta la función.
Permite pasar parámetros de una manera más amigable, y usar alias dentro del cuerpo de nuestra función. Por ejm, en jQuery, todo el código está en una función anónima autoejecutable.
Funcionamiento
Una función con nombre se llama función nombrada. Por ejm alert() dentro de Window significa alert y los paréntesis indican ejecución.
La sintaxis de una función anónima autejecutable es la siguiente:
(function(){})();
El segundo paréntesis (el que está en negrita) es el paréntesis que ejecuta la función. En este caso sí hay que poner puntos y comas (;) al final de la función.
Antes de que llegaran los módulos, este era un patrón muy utilizado a la hora de crear módulos en Javascript.
Ejm
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Funciones anónimas autoejecutables</title>
</head>
<body>
<h1>Funciones anónimas autoejecutables</h1>
<script>
// DECLARACIÓN DE FUNCIÓN ANÓNIMA AUTOEJECUTABLE
(function () {
console.log("Mi primer IIFE");
})();
(function (d, w, c) {
console.log("Mi segunda IIFE");
console.log(d);
console.log(w);
console.log(c);
})(document, window, console);
// YA SE ESTÁ EJECUTANDO EL CÓDIGO
</script>
</body>
</html>
Diferentes formas de escribir IIFE
Existen varias formas de escribir este tipo de funciones.
// CLASICA
(function (){
console.log("Clásica");
})();
// CROCKFORD (LIBRO JAVASCRIPT THE GOOD PARTS)
((function (){
console.log("Crockford");
})());
// UNARIA
+function(){
console.log("Unaria");
})();
// FACEBOOK
!function(){
console.log("Facebook");
})();