64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Immediately Invoked Functions Expressions(IIFEs)
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								## Function Statement
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A function created with a function declaration is a Function object and has all the properties, methods and behavior of Function objects.
							 | 
						||
| 
								 | 
							
								Example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								  function statement(item){
							 | 
						||
| 
								 | 
							
								    console.log('Function statement example '+ item);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Function Expression
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A function expression is similar to function statement except that function name can be omitted to create anonymous functions.
							 | 
						||
| 
								 | 
							
								Example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								  var expression = function (item){
							 | 
						||
| 
								 | 
							
								    console.log('Function expression example '+ item);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Immediately Invoked Functions Expressions
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A soon as function is created it invokes itself doesn't need to invoke explicitly.
							 | 
						||
| 
								 | 
							
								In the below example variable iife will store a string that is returned by the function execution.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								  var iife = function (){
							 | 
						||
| 
								 | 
							
								    return 'Immediately Invoked Function Expressions(IIFEs) example ';
							 | 
						||
| 
								 | 
							
								  }();
							 | 
						||
| 
								 | 
							
								  console.log(iife); // 'Immediately Invoked Function Expressions(IIFEs) example '
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The statement before IIFE should always end with a ; or it will throw an error.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Bad example**:
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								var x = 2 //no semicolon, will throw error
							 | 
						||
| 
								 | 
							
								(function(y){
							 | 
						||
| 
								 | 
							
								  return x;
							 | 
						||
| 
								 | 
							
								})(x); //Uncaught TypeError: 2 is not a function
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Why use Immediately Invoked Functions Expressions?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								  (function(value){
							 | 
						||
| 
								 | 
							
								    var greet = 'Hello';
							 | 
						||
| 
								 | 
							
								    console.log(greet+ ' ' + value);
							 | 
						||
| 
								 | 
							
								  })('IIFEs');
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In above example when javascript engine execute above code it will create global execution context when it sees code and create function object in memory for IIFE.
							 | 
						||
| 
								 | 
							
								And when it reaches on line `46` due to which function is Invoked a new execution context is created on the fly and so greet variable goes into that function execution context not into the global this is what makes it unique.
							 | 
						||
| 
								 | 
							
								`This ensures that code inside IIFE does not interfere with other code or be interfered by another code` and so code is safe.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### More Information
							 | 
						||
| 
								 | 
							
								[Immediately-invoked function expression on Wikipedia](https://en.wikipedia.org/wiki/Immediately-invoked_function_expression)
							 | 
						||
| 
								 | 
							
								[What does the leading semicolon in JavaScript libraries do?](https://stackoverflow.com/questions/1873983/what-does-the-leading-semicolon-in-javascript-libraries-do)
							 |