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