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.

Analogi Sederhana: Bayangkan Anda menulis daftar belanjaan (variabel luar) di secarik kertas kecil lalu menyimpannya di dalam dompet Anda. Anda kemudian keluar dari supermarket (fungsi induk selesai berjalan). Selama Anda masih membawa dompet Anda (fungsi anak aktif), daftar belanjaan tersebut akan tetap ada di saku Anda dan siap dibaca kapan saja Anda mau.

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?

A. Mempercepat proses kompilasi kode sebelum dijalankan
B. Membuat variabel bersifat privat yang hanya bisa diakses oleh fungsi di dalamnya
C. Mengubah kode JavaScript menjadi kode biner mesin

Bangun Karier Sebagai AI Engineer dalam 8 Minggu!

Info Detail
Apa Itu Closure? Definisi & Penjelasan | Kamus REA Ruangguru