Fungsi & LogikaRabu, 21 Januari 2026

Closures

Fungsi dengan memori.

Iklan

Dukung JS Fruggal dengan melihat sponsor kami.

Closure adalah ketika sebuah fungsi "mengingat" lexical scope-nya bahkan ketika fungsi itu dieksekusi di luar scope tersebut. Ini adalah rahasia privasi data di JavaScript.

Analogi Ransel

Bayangkan sebuah fungsi adalah seorang Pendaki.
Saat Pendaki meninggalkan rumah (fungsi luar), mereka mengemas Ransel (Closure).
Mereka memasukkan semua variabel yang mereka butuhkan dari rumah ke dalam ransel itu.
Bahkan jika rumah terbakar (fungsi luar selesai), Pendaki masih memiliki ransel mereka dengan variabel aman di dalamnya.

Pola "Rekening Bank"

Dalam banyak bahasa, Anda memiliki variabel private. Di JS, kita menggunakan Closures. Ini adalah Pertanyaan Wawancara Developer Senior yang klasik.

function buatRekeningBank(saldoAwal) {
  // Variabel ini PRIBADI (PRIVATE). 
  // Tidak ada yang bisa mengaksesnya langsung dari luar.
  let saldo = saldoAwal;

  return {
    setor: (jumlah) => {
      saldo += jumlah;
      return `Disetor ${jumlah}. Saldo Baru: ${saldo}`;
    },
    tarik: (jumlah) => {
      if (jumlah > saldo) return "Dana tidak mencukupi";
      saldo -= jumlah;
      return `Ditarik ${jumlah}. Saldo Baru: ${saldo}`;
    },
    // Kita tidak mengembalikan variabel 'saldo', jadi tetap tersembunyi.
    cekSaldo: () => saldo
  };
}

const rekeningSaya = buatRekeningBank(100);

console.log(rekeningSaya.setor(50)); // 150
console.log(rekeningSaya.saldo);     // undefined (Tidak bisa disentuh!)
console.log(rekeningSaya.cekSaldo()); // 150 (Harus minta baik-baik)

Mengapa ini pro?

Jika saldo adalah variabel global, bagian mana pun dari kode Anda bisa secara tidak sengaja mengaturnya menjadi 0. Dengan menggunakan closure, Anda menjamin bahwa saldo hanya dapat diubah menggunakan aturan setor dan tarik yang Anda buat.

Iklan

Dukung JS Fruggal dengan melihat sponsor kami.