IIFE (Immediately Invoked Function Expressions)
IIFE (Immediately Invoked Function Expressions) – Ինչու էր սա պետք ու ինչու հիմա գրեթե չենք օգտագործում
IIFE (Immediately Invoked Function Expressions) կամ անմիջապես կանչվող ֆունկցիաների արտահայտությունները՝ JavaScript-ի կառուցվածքային միտքը, որը նախկինում օգտագործվում էր հաճախ, սակայն այսօր պակաս պահանջված է դարձել։ Դրանք էին ֆունկցիաներ, որոնք ուղղակիորեն սահմանվում էին և անմիջապես կատարվում էին։
Նրանք հիմնականում օգտագործվում էին փոփոխականների հետ կապված խնդիրները լուծելու համար՝ հատկապես երբ JavaScript-ի միայն global scope-ն էր հասանելի։
(function() {
// Կոդը այստեղ
console.log('This is an IIFE!');
})();
Այս մեթոդի առավելությունները.
(function() {
let user = 'Aram';
console.log(user);
})();
console.log(user); // ReferenceError: user is not defined
Այս մեթոդի առավելությունները.
Ի սկզբանե IIFE-ները ծնվել են որպես լուծում՝ երբ JavaScript-ի միակ scope-ը եղել է global scope-ը։ Դա նշանակում է, որ ցանկացած փոփոխական կամ ֆունկցիա կարող էր փոխել ամբողջ ծրագրի վարքը։ Այս դեպքում, IIFE-ները շատ կարևոր գործիք էին՝ մոդուլային մոտեցումներ ու private state ստեղծելու համար։
Կոդի մաքրությունն ու սահմանափակումը ստանալը կարևոր էին՝ օրինակ՝ տարբեր գրադարանների ներմուծում, որոնք չէին ցանկանում փոխել գլոբալ փոփոխականները։
Երբ ES6-ում ավելացվեցին let և const օպերատորները, և JavaScript-ը ստացավ block scope՝ IIFE-ների օգտագործումը նվազեց։ Այս օպերատորները ավտոմատ կերպով թույլ են տալիս փոփոխականները սահմանափակել միայն տվյալ կոդի բլոկի շրջանակներում։
Այսօր մենք կարող ենք օգտագործել `let`, `const` կամ նույնիսկ arrow ֆունկցիաներ՝ առանց IIFE-ների, և այդ կերպ գործել ավելի մաքուր ու պարզ ձևով՝ առանց ավելորդ փակող ֆունկցիաների։
let user = 'Aram'; // Block scope
console.log(user);
Այս մեթոդի առավելությունները.
IIFE-ների տարածվածությունը հիմնականում պայմանավորված էր JavaScript-ի սահմանափակ հնարավորություններով՝ երբ լեզուն չուներ block scoping մեթոդներ։
Օրինակ՝ տարբեր ֆունկցիաների ու փոփոխականների միջև կոնֆլիկտներից խուսափելու համար IIFE-ն ամենալավ լուծումն էր։
(function() {
var localVar = 'I am local';
console.log(localVar);
})();
console.log(localVar); // ReferenceError
Այս մեթոդը ապահովում էր նաև ֆունկցիոնալ մոդուլների ստեղծումը, որտեղ փակողը պահպանում էր տվյալները՝ դուրս մնալով արտաքին աշխարհի ազդեցությունից։
IIFE-ները շատ կարևոր էին JavaScript-ի պատմության մեջ, բայց հիմա դրանց կիրառությունը նվազել է՝ ի շնորհիվ ES6-ի և նոր լեզվաբառարանների առանձնահատկությունների։ Հիմա մենք կարող ենք պարզապես օգտագործել block scoping և closures, ինչը թույլ է տալիս գրել ավելի մաքուր ու պարզ կոդ՝ առանց IIFE-ների։