0Pricing
JavaScript Academy · Pelajaran

Variabel Privat dengan Closure

Sembunyikan status di balik scope fungsi.

Variabel Privat dengan Closure adalah pelajaran JavaScript Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar JavaScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus JavaScript Academy mencakup 4 pelajaran total.

Privasi melalui Penutupan

JavaScript dahulu tidak memiliki cara bawaan untuk menjadikan bidang objek privat. Penutupan menyediakan caranya: variabel di dalam fungsi tidak terlihat dari luar, tetapi tetap dapat diakses oleh fungsi yang didefinisikan di dalamnya.

function secretBox() {
  let secret = "hidden";
  return {
    reveal: () => secret
  };
}
const box = secretBox();
console.log(box.reveal()); // "hidden"
console.log(box.secret);   // undefined

Penghitung dengan Status Privat

Contoh klasiknya adalah penghitung yang nilainya tidak dapat diutak-atik secara langsung. Hanya metode yang dikembalikan yang dapat mengubahnya.

function makeCounter() {
  let count = 0;
  return {
    increment: () => ++count,
    value: () => count
  };
}
const c = makeCounter();
c.increment();
c.increment();
console.log(c.value()); // 2

Statusnya Tidak Dapat Disentuh

Tidak ada cara untuk mengakses count dari luar. Upaya untuk membacanya menghasilkan undefined; Anda harus mengaksesnya melalui metode.

function makeCounter() {
  let count = 0;
  return { inc: () => ++count, get: () => count };
}
const c = makeCounter();
c.count = 100;        // creates an unrelated property
console.log(c.get()); // 0 - real count untouched

Menegakkan Aturan

Karena akses dilakukan melalui metode, Anda dapat menegakkan invarian, misalnya tidak pernah membiarkan saldo menjadi negatif.

function account(start) {
  let balance = start;
  return {
    withdraw: (n) => {
      if (n > balance) return "insufficient";
      balance -= n;
      return balance;
    },
    balance: () => balance
  };
}
const a = account(100);
console.log(a.withdraw(150)); // "insufficient"
console.log(a.withdraw(40));  // 60

Beberapa Bidang Privat

Satu penutupan dapat melindungi beberapa variabel sekaligus. Semuanya tersembunyi dan hanya dibagikan di antara metode yang dikembalikan.

function user(name) {
  let logins = 0;
  let lastSeen = null;
  return {
    login: () => { logins++; lastSeen = "now"; },
    stats: () => ({ name, logins, lastSeen })
  };
}
const u = user("Ada");
u.login();
console.log(u.stats()); // { name: "Ada", logins: 1, lastSeen: "now" }

Fungsi Pembantu Privat

Bukan hanya data; Anda juga dapat menyembunyikan fungsi internal. Hanya metode yang Anda buka yang bersifat publik.

function temperature() {
  let celsius = 0;
  const toF = (c) => c * 9 / 5 + 32; // private
  return {
    set: (c) => { celsius = c; },
    fahrenheit: () => toF(celsius)
  };
}
const t = temperature();
t.set(100);
console.log(t.fahrenheit()); // 212

Instans yang Mandiri

Setiap pemanggilan fungsi pabrik membuat status privat yang terpisah, sehingga berbagai instans tidak pernah saling mengganggu.

function makeCounter() {
  let n = 0;
  return { inc: () => ++n };
}
const a = makeCounter();
const b = makeCounter();
console.log(a.inc(), a.inc()); // 1 2
console.log(b.inc());          // 1

Pemaparan Hanya-Baca

Buka pengambil tanpa penetap agar suatu nilai hanya dapat dibaca dari luar, tetapi tetap dapat diubah secara internal.

function timer() {
  let ticks = 0;
  setupInternally();
  function setupInternally() { ticks = 3; }
  return { ticks: () => ticks };
}
const t = timer();
console.log(t.ticks()); // 3 - no way to set it outside

Perbandingan: Bidang Kelas

JavaScript modern juga mendukung bidang kelas #private. Penutupan tetap berguna untuk fungsi pabrik dan saat Anda menginginkan privasi tanpa kelas.

class Counter {
  #count = 0;
  inc() { return ++this.#count; }
}
const c = new Counter();
console.log(c.inc()); // 1

Mengapa Ini Berfungsi

Metode yang dikembalikan merupakan penutupan atas variabel luar. Fungsi luar memang sudah selesai, tetapi cakupannya tetap hidup karena penutupan tersebut masih merujuk kepadanya.

Tembolok Memoisasi

Status privat sangat cocok untuk tembolok. Objek tembolok tetap tersembunyi dan bertahan di antara berbagai pemanggilan.

function memoSquare() {
  const cache = {};
  return (n) => {
    if (cache[n] === undefined) cache[n] = n * n;
    return cache[n];
  };
}
const sq = memoSquare();
console.log(sq(4)); // 16
console.log(sq(4)); // 16 (cached)

Pemeriksaan Cepat

Variabel privat dengan penutupan.

Ringkasan

Penutupan menciptakan privasi: variabel di dalam fungsi pabrik tidak dapat dijangkau dari luar, tetapi dibagikan di antara metode yang dikembalikan. Hal ini memungkinkan penghitung yang tahan terhadap pengubahan, saldo dengan invarian, pembantu tersembunyi, dan tembolok. Setiap pemanggilan fungsi pabrik menghasilkan status yang mandiri. Bidang kelas modern #private merupakan alternatif, tetapi penutupan sangat unggul untuk kode bergaya fungsi pabrik.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Variabel Privat dengan Closure” gratis?

Ya — teks lengkap “Variabel Privat dengan Closure” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus JavaScript Academy, upgrade ke CoddyKit PRO. Kursus JavaScript Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Variabel Privat dengan Closure”?

Sembunyikan status di balik scope fungsi. Kamu berlatih JavaScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai JavaScript Academy?

Tidak diperlukan pengalaman sebelumnya. JavaScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Variabel Privat dengan Closure” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran JavaScript Academy ini?

Ya. Setiap pelajaran JavaScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Cara Closure Menangkap Status
  2. Variabel Privat dengan Closure
  3. Pola Modul (IIFE)
  4. Fungsi Pabrik
← Kembali ke JavaScript Academy