Hàm
IIFE
IIFE trong Node.js so với hàm/closure ẩn danh gọi ngay trong Go, Rust, Swift và Java.
- Phiên bản tối thiểu
- Node.js ≥ 12.20Go ≥ 1.0Rust ≥ 1.58Swift ≥ 2.0Java ≥ 25
- Đã chạy thử trên
- Node.js 24.12.0Go 1.27.1Rust 1.98.1Swift 6.2.4Java 25.0.4.1
Code Node.js là ES module: lưu file .mjs hoặc đặt "type": "module" trong package.json.
IIFE (Immediately Invoked Function Expression) là hàm được định nghĩa và gọi ngay lập tức, thường để tạo một scope riêng. Go, Rust và Swift không có cú pháp đặc biệt cho việc này — bạn chỉ cần định nghĩa một hàm/closure ẩn danh rồi gọi nó ngay. Java thì khó hơn: lambda expression cần một kiểu functional interface cụ thể nên không thể gọi thẳng, phải ép kiểu (cast) trước khi gọi — không ai viết Java thật kiểu này, thường dùng một block { ... } hoặc method riêng để tạo scope thay vì cố mô phỏng IIFE.
Định nghĩa và gọi ngay một hàm
(function (name) {
console.log('hello', name);
})('bob'); // hello bobpackage main
import "fmt"
func main() {
func(name string) {
fmt.Println("hello", name)
}("bob") // hello bob
}fn main() {
(|name: &str| {
println!("hello {name}");
})("bob"); // hello bob
}({ (name: String) in
print("hello \(name)")
})("bob") // hello bobvoid main() {
// lambda cần một functional interface cụ thể nên phải ép kiểu trước
// khi gọi luôn — hiếm khi viết thế này trong Java thật
((Consumer<String>) name -> IO.println("hello " + name)).accept("bob"); // hello bob
}Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#iife