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) |