Closure
Closure sering terdengar mistis, padahal sederhana: fungsi mengingat variabel dari tempat ia dibuat, bahkan setelah fungsi luarnya selesai berjalan. Ini yang memungkinkan pembuatan counter privat — hitung tidak bisa diakses dari luar, hanya lewat fungsi yang dikembalikan. Closure juga yang membuat callback di dalam setTimeout masih bisa membaca variabel di sekitarnya beberapa detik kemudian, jauh setelah fungsi induknya selesai.
👀 Contoh dulu
function buatDompet() {
let saldo = 100; // privat, tak bisa disentuh dari luar
return function () {
saldo = saldo - 10;
return saldo;
};
}
const tarik = buatDompet();
console.log(tarik());
console.log(tarik());Hasilnya: 90 80
💡 Variabel saldo tetap hidup di antara pemanggilan meski buatDompet() sudah selesai — itulah closure.
📝 Sekarang giliranmu
Buat fungsi buatCounter() yang punya let hitung = 0 dan mengembalikan fungsi yang menaikkan lalu mengembalikan hitung. Buat const naik = buatCounter(), panggil dua kali dan tampilkan hasilnya.