Định nghĩa
IIFE (Immediately Invoked Function Expression) – hàm được định nghĩa và thực thi ngay lập tức.
Cú pháp phổ biến
(function() {
// code riêng tư
})();
// Hoặc
(function() {
// code
}());
// Arrow function (ES6)
(() => {
// code
})();
Tại sao cần IIFE?
- Tạo scope riêng (trước ES6 không có block scope). Biến bên trong không lọt ra global.
- Tránh ô nhiễm global namespace.
- Đóng gói (encapsulation) logic khởi tạo, module pattern.
- Chạy code ngay mà không cần gọi tên hàm.
Ví dụ: Module pattern
var Counter = (function() {
var count = 0; // private
return {
increment: function() { return ++count; },
decrement: function() { return --count; },
get: function() { return count; }
};
})();
Counter.increment(); // 1
Counter.increment(); // 2
Counter.get(); // 2
// count không truy cập được từ ngoài
Hiện nay (ES6+)
let/constcó block scope → ít cần IIFE cho biến cục bộ.- ES Modules (
import/export) thay thế module pattern. - Vẫn dùng IIFE cho: script inline, benchmark, polyfill, code chạy ngay một lần.