Closure
Closure adalah konsep penting dalam JavaScript di mana sebuah fungsi "mengingat" dan tetap dapat mengakses variabel-variabel yang berada di luar ruang lingkup aslinya (lexical scope), bahkan setelah fungsi luar (parent function) yang menampung variabel tersebut selesai dijalankan.
1. Bagaimana Lexical Scoping Membentuk Closure
Di JavaScript, ruang lingkup variabel ditentukan oleh lokasi di mana variabel tersebut ditulis di dalam kode sumber. Fungsi anak memiliki akses penuh ke variabel yang dideklarasikan di fungsi induknya. Saat fungsi induk selesai berjalan dan dihapus dari Call Stack, variabel di dalamnya seharusnya dihancurkan. Namun, jika fungsi anak masih aktif (misalnya dikembalikan ke variabel lain), variabel induk tersebut akan dipertahankan di memori khusus.
2. Contoh Penerapan Terpopuler: Private Variable
JavaScript asli tidak memiliki kata kunci private untuk variabel di dalam objek. Closure sering digunakan untuk menyembunyikan data agar tidak bisa dimanipulasi secara liar dari luar:
function buatRekening(saldoAwal) {
let saldo = saldoAwal; // Variabel ini "terkunci" di dalam scope buatRekening
return {
cekSaldo: function() { return saldo; },
setorUang: function(jumlah) { saldo += jumlah; }
};
}
const tabunganSaya = buatRekening(100000);
console.log(tabunganSaya.saldo); // Output: undefined (tidak bisa diakses langsung)
tabunganSaya.setorUang(50000);
console.log(tabunganSaya.cekSaldo()); // Output: 150000 (aman diubah lewat method resmi)
3. Implikasi Memori (Memory Leak)
Meskipun sangat berguna, closure harus digunakan secara bijaksana. Karena variabel luar tetap dipertahankan di memori selama fungsi penampungnya aktif, penyalahgunaan closure yang menampung objek data besar dapat menyebabkan konsumsi RAM yang terus membengkak (Memory Leak) karena Garbage Collector sistem tidak diizinkan membersihkan memori tersebut.
Uji Pemahaman Mandiri
Apa fungsi utama dari pemanfaatan konsep Closure dalam penulisan kode JavaScript?
