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.