2.12 IIFE
IIFE āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§āϰ āĻ āύā§āϝāϤāĻŽ āĻāύāĻĒā§āϰāĻŋāϝāĻŧ āĻāĻāĻāĻŋ āĻĄāĻŋāĻāĻžāĻāύ āĻĒā§āϝāĻžāĻāĻžāϰā§āύāĨ¤ āĻāĻāĻŋ āĻāĻĢāĻŋ āĻŦāϞā§āĻ āĻāĻā§āĻāĻžāϰāĻŖ āĻāϰā§āĨ¤ IIFE āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻŽāĻŋāĻāύāĻŋāĻāĻŋ āĻĻā§āϰā§āĻāĻĻāĻŋāύ āϧāϰ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϏāĻā§ āĻāĻŋāύā§āϤ⧠āĻāϰ āĻŽāĻŋāϏāϞāĻŋāĻĄāĻŋāĻ āĻļāĻŦā§āĻĻāĻāĻŋ āĻāĻŋāϞ âāϏā§āϞāĻĢ-āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻāĻŋāĻ āĻāύā§āύāĻŋāĻŽāĻžāϏ āĻĢāĻžāĻāĻļāύâ āϝāĻž āĻĒāϰāĻŦāϰā§āϤā§āϤā§Â Ben Alman āĻāĻāĻŋāϰ āĻāĻāĻāĻŋ āĻāĻĒāϝā§āĻā§āϤ āύāĻžāĻŽ āĻĻāĻŋāϝāĻŧā§āĻā§āύ âIIFEâāĨ¤ āĻāĻāĻā§ āĻāĻāĻžāϰ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āϞā§āĻāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰāĻŦā§āĨ¤
IIFE āĻāĻŋ?
IIFE â āĻāϰ āĻĒā§āϰā§āĻŖāϰā§āĻĒ āĻšāĻā§āĻā§ Immediately Invoked Function ExpressionāĨ¤ IIFE āĻšāϞ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āϝāĻž āĻāĻāĻāĻŋ āĻāĻā§āϏāĻĒā§āϰā§āĻļāύ āĻšāĻŋāϏāĻžāĻŦā§ āĻĄāĻŋāĻā§āϞā§ā§āĻžāϰ āĻāĻŦāĻ āĻĄāĻŋāĻā§āϞā§ā§āĻžāϰā§āĻļāύā§āϰ āĻĒāϰāĻĒāϰāĻ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
IIFE āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏāĻ
āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻĻā§āĻāĻžāϝāĻŧ āĻāĻŋāĻāĻžāĻŦā§ IIFE āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāϤ⧠āĻšā§āĻ
				
					(function () {
	// code goes here...
})();
 
				
			
		āĻāĻĒāύāĻŋ arrow function āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻ IIFE āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤
				
					(() => {
	// code goes here...
})();
 
				
			
		IIFE āĻā§āύ?
āϝāĻāύ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āĻĄāĻŋāĻĢāĻžāĻāύ āĻŦāĻž āĻĄāĻŋāĻā§āϞā§ā§āĻžāϰ āĻāϰā§āύ, āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻā§āĻāĻŋāύ āĻā§āϞā§āĻŦāĻžāϞ āĻ āĻŦāĻā§āĻā§āĻā§āϰ āϏāĻžāĻĨā§ āĻĢāĻžāĻāĻļāύāĻā§ āϝā§āĻ āĻāϰā§āĨ¤ āĻāĻāĻāĻāĻžāĻŦā§, āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻĢāĻžāĻāĻļāύā§āϰ āĻŦāĻžāĻāϰ⧠āĻāĻāĻāĻŋ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻĄāĻŋāĻā§āϞā§ā§āĻžāϰ āĻāϰā§āύ, āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻā§āĻāĻŋāύ āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻā§ āĻā§āϞā§āĻŦāĻžāϞ āĻ āĻŦāĻā§āĻā§āĻā§āϰ āϏāĻžāĻĨā§ āϝā§āĻ āĻāϰā§āĨ¤ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻĻāĻžāĻšāϰāĻŖ āĻĻā§āĻā§āύāĻ
				
					var num = 7;
function sum(a, b) {
	return a + b;
}
console.log(window.sum); 
/**
Æ sum(a,b) {
 return a + b;
}
*/
console.log(window.num); // 7
 
				
			
		āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§ āĻ āύā§āĻ āĻā§āϞā§āĻŦāĻžāϞ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύ āĻĨāĻžāĻā§, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāύāĻāĻĢāĻŋāĻļāĻŋā§ā§āύā§āĻāϞāĻŋ āĻŽā§āĻŽā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻā§āϞā§āĻŦāĻžāϞ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύāĻā§āϞāĻŋ āĻ āύā§āϝ āĻā§āύ āϞāĻžāĻāĻŦā§āϰā§āϰā§āϰ āϏāĻžāĻĨā§ āĻāύāĻĢā§āϞāĻŋāĻā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āϝāĻĻāĻŋ āĻ āϞāĻžāĻāĻŦā§āϰā§āϰā§āϤ⧠āĻāĻāĻ āύāĻžāĻŽā§ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύ āĻĨāĻžāĻā§āĨ¤ āĻĢāĻžāĻāĻļāύ āĻāĻŦāĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻā§āϞāĻŋāĻā§ āĻā§āϞā§āĻŦāĻžāϞ āĻ āĻŦāĻā§āĻā§āĻ āĻāύāĻĢā§āϞāĻŋāĻā§āĻ āĻāϰāĻž āĻĨā§āĻā§ āĻŦāĻŋāϰāϤ āϰāĻžāĻāĻžāϰ āĻāĻāĻāĻŋ āĻāĻĒāĻžāϝāĻŧ āĻšāϞ IIFE āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāĨ¤
āύā§āĻāĻŽāĻĄ IIFE:
				
					(function domeSomeMagic() {
	// code goes here...
})();
 
				
			
		IIFE āϏā§āĻŽāĻŋāĻā§āϞāύ āĻĻāĻŋā§ā§āĻ āĻļā§āϰ⧠āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϝā§āĻŽāύ:
				
					(function () {
	// code goes here...
})();
 
				
			
		āĻāĻ āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏā§, āĻĻā§āĻ āĻŦāĻž āϤāϤā§āϧāĻŋāĻ āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻĢāĻžāĻāϞāĻā§ āĻāĻāĻ āĻĢāĻžāĻāϞ⧠āĻŦāĻžāύā§āĻĄāϞ āĻāϰāĻžāϰ āĻāύā§āϝ⧠āϏā§āĻā§āĻāĻŽā§āύā§āĻāĻāĻŋ āĻļā§āώ āĻāϰāϤ⧠āϏā§āĻŽāĻŋāĻā§āϞāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻĒāύāĻžāϰ āĻĻā§āĻāĻŋ āĻĢāĻžāĻāϞ āĻāĻā§ file1.js āĻāĻŦāĻ file2.js āϝāĻž IIFE āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤
				
					/**
 * file1.js
 */
(function () {
	// ...
})();
/**
 * file2.js
 */
 
(function () {
// ...
})(); 
				
			
		āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻā§āĻĄ āĻŦāĻžāύā§āĻĄāϞāĻžāϰ āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāϝāĻŧ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāϰ āĻā§āĻĄāĻā§ āĻāĻāĻāĻŋ āĻāĻāĻ āĻĢāĻžāĻāϞā§āϰ āĻā§āĻĄ āĻāύāĻā§āĻ āĻāϰāϤ⧠āĻāĻžāύ āϏā§āĻŽāĻŋāĻā§āϞāύ (;) āĻāĻžāĻĄāĻŧāĻž, āĻāύāĻāĻžāύā§āĻā§āĻĄ āĻā§āĻĄāĻāĻŋ āĻāĻāĻāĻŋ Uncaught TypeError: (intermediate value)(âĻ) is not a function āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻāϰā§āϰ āĻĻāĻŋāĻŦā§āĨ¤
āϧāϰā§āύ āĻāĻĒāύāĻžāϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĢāĻžāĻāĻļāύ āϏāĻš math.js āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻāĻā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ HTML āĻĢāĻžāĻāϞ⧠math.js āϞā§āĻĄ āĻāϰā§āύāĻ
				
					function add(a, b) {
	return a + b;
}
function sub(a, b) {
	return a - b;
}
function mult(a, b) {
	return a * b;
}
function div(a, b) {
	return a / b;
}
 
				
			
		
				
					
    
    JavaScript IIFE 
    
    
    
 
				
			
		
				
					function sub() {
	return "sub";
}
 
				
			
		
				
					let result = sub(30, 20);
console.log(result); // sub
 
				
			
		
				
					var math = (function () {
	function add(a, b) {
		return a + b;
	}
	function sub(a, b) {
		return a - b;
	}
	function mult(a, b) {
		return a * b;
	}
	function div(a, b) {
		return a / b;
	}
	return {
		add: add,
		sub: sub,
		mult: mult,
		div: div,
	};
})();
 
				
			
		
				
					var result = math.sub(30, 20);
console.log(result); // 10
console.log(sub()); // sub
 
				
			
		āĻĒā§āϰāĻĨāĻŽ sub() āĻĢāĻžāĻāĻļāύāĻā§ math.sub() āĻĻāĻŋā§ā§ āĻāύāĻā§āĻ āĻāϰāĻž āĻšā§ā§āĻā§ āϝā§āĻāĻŋ math.js āĻĨā§āĻā§ āĻāĻā§āϏāĻĒā§āϰā§āĻ āĻāϰāĻž āĻ āύā§āϝāĻĻāĻŋāĻā§ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ sub() āĻĢāĻžāĻāĻļāύāĻā§ anotherLibrary.js āĻĨā§āĻā§ āĻāύāĻā§āĻ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤
IIFE āĻāϰ āϏā§āĻŦāĻŋāϧāĻžāĻ
- āĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻā§āϞā§āĻŦāĻžāϞ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύ āϤā§āϰāĻŋ āĻāϰ⧠āύāĻžāĨ¤
- IIFE āϤ⧠āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāĻž āĻĢāĻžāĻāĻļāύ āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻ āύā§āϝ āĻĢāĻžāĻāĻļāύ āĻāĻŦāĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞā§āϰ āϏāĻžāĻĨā§ āĻāύāĻĢā§āϞāĻŋāĻā§āĻ āĻāϰ⧠āύāĻžāĨ¤ āĻāĻŽāύāĻāĻŋ āϤāĻžāĻĻā§āϰ āĻāĻāĻ āύāĻžāĻŽ āĻĨāĻžāĻāϞā§āĻāĨ¤
- āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§āϰ āĻā§āĻĄ āĻ āϰā§āĻāĻžāύāĻžāĻāĻ āĻāϰā§āĨ¤
- āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻā§āĻĄ āĻŽā§āĻāύā§āĻāĻžāύāĻžāĻŦāϞ āĻāϰā§āĨ¤
- Normally, IIFE does not require a name. But even when we name an IIFE, it keeps on working.
- Execute an async function
- IIFE that Takes ArgumentsÂÂÂ(function (first, last) {Â Â alert(`My name is ${first} ${last}.`);})(“Lukman”, “Hussain”);
- Use an IIFE to immediately execute the calculate function.
- Writing an IIFE that Takes 3 Arguments and return sum.
- Write and IFFE that return an object.