IIFE (Immediately Invoked Function Expression) หรือ Self-Executing Anonymous Function คือ ฟังก์ชันที่ถูกห่อด้วยวงเล็บและ เรียกใช้ทันทีที่นิยาม ช่วยสร้าง ขอบเขต (scope) แบบแยกต่างหาก ป้องกันการปนเปื้อนตัวแปรใน Global Scope
ไวยากรณ์
(function() {
// โค้ดในนี้
})();
// หรือ
(function() {
// โค้ด
}());
การทำงาน
(function() { ... })— คู่วงเล็บแรก แปลง Function Declaration ให้เป็น Function Expression()— คู่วงเล็บที่สอง เรียกใช้ฟังก์ชันทันที
ประโยชน์หลัก
- Namespace Isolation: ตัวแปรภายในไม่รั่วไหลสู่ global
- Avoid Global Pollution: ไม่สร้าง global variables
- Module Pattern: พื้นฐานของ Module Pattern ก่อน ES6 Modules
- Data Privacy: สร้าง private variables ได้ด้วย Closure
ตัวอย่างการใช้งานจริง
// Module Pattern ด้วย IIFE
var Counter = (function() {
var count = 0; // private variable
return {
increment: function() { return ++count; },
decrement: function() { return --count; },
getCount: function() { return count; }
};
})();
Counter.increment(); // 1
Counter.increment(); // 2
Counter.getCount(); // 2
// count ไม่เข้าถึงได้จากภายนอก
Arrow Function IIFE (ES6)
(() => {
// code
})();
หมายเหตุ: ใน ES6+ ควรใช้ let/const และ ES Modules (import/export) แทน IIFE สำหรับการจัดการโมดูล