60 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Immediately Invoked Functions Expressions(IIFEs)
 | |
| localeTitle: Expresiones de funciones inmediatamente invocadas (IIFE)
 | |
| ---
 | |
| ## Declaración de función
 | |
| 
 | |
| Una función creada con una declaración de función es un objeto de función y tiene todas las propiedades, métodos y comportamiento de los objetos de función. Ejemplo:
 | |
| 
 | |
| ```javascript
 | |
|   function statement(item){ 
 | |
|     console.log('Function statement example '+ item); 
 | |
|   } 
 | |
| ```
 | |
| 
 | |
| ## Expresión de la función
 | |
| 
 | |
| Una expresión de función es similar a la declaración de función, excepto que se puede omitir el nombre de la función para crear funciones anónimas. Ejemplo:
 | |
| 
 | |
| ```javascript
 | |
|   var expression = function (item){ 
 | |
|     console.log('Function expression example '+ item); 
 | |
|   } 
 | |
| ```
 | |
| 
 | |
| ## Expresiones de funciones inmediatamente invocadas
 | |
| 
 | |
| Tan pronto como se crea la función, se invoca a sí misma, no necesita invocar explícitamente. En la siguiente variable de ejemplo, iife almacenará una cadena que es devuelta por la ejecución de la función.
 | |
| 
 | |
| ```javascript
 | |
|   var iife = function (){ 
 | |
|     return 'Immediately Invoked Function Expressions(IIFEs) example '; 
 | |
|   }(); 
 | |
|   console.log(iife); // 'Immediately Invoked Function Expressions(IIFEs) example ' 
 | |
| ```
 | |
| 
 | |
| La declaración antes de IIFE siempre debe terminar con una; o lanzará un error.
 | |
| 
 | |
| **Mal ejemplo**
 | |
| 
 | |
| ```javascript
 | |
| var x = 2 //no semicolon, will throw error 
 | |
|  (function(y){ 
 | |
|   return x; 
 | |
|  })(x); //Uncaught TypeError: 2 is not a function 
 | |
| ```
 | |
| 
 | |
| ## ¿Por qué usar las expresiones de funciones invocadas inmediatamente?
 | |
| 
 | |
| ```javascript
 | |
|   (function(value){ 
 | |
|     var greet = 'Hello'; 
 | |
|     console.log(greet+ ' ' + value); 
 | |
|   })('IIFEs'); 
 | |
| ```
 | |
| 
 | |
| En el ejemplo anterior, cuando el motor javascript ejecuta el código anterior, creará un contexto de ejecución global cuando vea el código y creará un objeto de función en la memoria para IIFE. Y cuando llega a la línea `46` debido a la función que se invoca, se crea un nuevo contexto de ejecución sobre la marcha y, por lo tanto, la variable greet entra en ese contexto de ejecución de la función y no en el global. Esto es lo que lo hace único. `This ensures that code inside IIFE does not interfere with other code or be interfered by another code` por lo que el código es seguro.
 | |
| 
 | |
| #### Más información
 | |
| 
 | |
| [Expresión de función inmediatamente invocada en Wikipedia](https://en.wikipedia.org/wiki/Immediately-invoked_function_expression) [¿Qué hace el punto y coma principal en las bibliotecas de JavaScript?](https://stackoverflow.com/questions/1873983/what-does-the-leading-semicolon-in-javascript-libraries-do) |