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