⚡ Memahami Perbedaan call() dan apply() di JavaScript

Dalam JavaScript, fungsi adalah first-class citizen, artinya fungsi dapat diperlakukan seperti nilai. Salah satu kemampuan penting adalah mengendalikan konteks this secara manual menggunakan call() dan apply().
Meski keduanya mirip, ada satu perbedaan utama yang wajib dipahami: cara mengirimkan argumen.
🔹 Apa Itu call()?
call() menjalankan fungsi sambil menetapkan nilai this, lalu mengirimkan argumen satu per satu.
function greet(city, country) {
console.log(`Hello, I am ${this.name} from ${city}, ${country}`);
}
const user = { name: "Safei" };
greet.call(user, "Solo", "Indonesia");
🔹 Apa Itu apply()?
apply() juga menjalankan fungsi sambil mengatur nilai this, tetapi argumen harus dikirim dalam array.
greet.apply(user, ["Solo", "Indonesia"]);
⚠️ Perbedaan Utama
| Method | Cara Kirim Argumen | Eksekusi |
| call() | argumen dipisah | func.call(obj, a, b, c) |
| apply() | argumen array | func.apply(obj, [a, b, c]) |
🧠 Mana yang Harus Dipakai?
Gunakan call() ketika:
Kamu sudah punya argumen terpisah
Ingin mengeksekusi fungsi langsung dengan konteks tertentu
Gunakan apply() ketika:
Kamu ingin mengirimkan argumen berbentuk array
Kamu bekerja dengan data seperti hasil
Math.max,spread, dll
💡 Catatan Modern (ES6+)
Sejak hadirnya spread operator, penggunaan apply() semakin jarang:
func.call(obj, ...argsArray);
Dengan ini, apply() tidak lagi wajib, tetapi tetap penting untuk dipahami demi memahami pola JavaScript klasik.
🎯 Kesimpulan
call()danapply()sama-sama untuk mengatur nilaithis.Bedanya hanya pada cara mengirimkan argumen.
Di JavaScript modern,
call()+ spread sering menjadi pilihan utama.Meski sederhana, keduanya adalah fondasi untuk memahami function binding, method borrowing, dan OOP style di JavaScript.




