CodeBlanks Logo Icon CodeBlanks

Özet - Closure

JavaScript kursu · Orta seviye · Ders 18/134

Closure ve IIFE kullanarak dışarıdan erişilemeyen özel değişkenleri olan bir banka hesabı yazarsın.

Özet - Closure

Bu grupta closure'ın ne olduğunu, üretici fonksiyonlar ile özel durum üretmeyi, IIFE ile izole kapsamlar oluşturmayı, module deseni ile herkese açık API tasarlamayı ve döngüdeki closure tuzağını öğrendin.

Şimdi tüm bunları bir araya getireceğiz: dışarıdan erişilemeyen bir balance tutan, yalnızca deposit, withdraw ve getBalance metodlarını açan bir banka hesabı yazacağız.

Uygulama Banka hesabı yaz

createAccount(initial) adında bir fonksiyon tanımla. İçinde let balance = initial ile özel bir bakiye tut. Döndürülen nesnede üç metod olsun: deposit(amount) bakiyeyi artırıp döndürür, withdraw(amount) bakiyeyi azaltıp döndürür, getBalance() bakiyeyi döndürür. Sonra createAccount(100) ile bir hesap oluştur, deposit(50) ve getBalance() çağrılarını yazdır.

Örnek çözümü göster
function createAccount(initial) {
  let balance = initial;
  return {
    deposit: function(amount) { balance += amount; return balance; },
    withdraw: function(amount) { balance -= amount; return balance; },
    getBalance: function() { return balance; }
  };
}

const acc = createAccount(100);
console.log(acc.deposit(50));
console.log(acc.getBalance());

Uygulama Yetersiz bakiye koruması ekle

Aşağıdaki createAccount tanımını al ve withdraw metodunu güncelle: bakiye yetersizse throw new Error("Yetersiz bakiye") fırlat. Yoksa bakiyeyi azaltıp döndür. Denetim if (balance < amount) ile başlasın.

Örnek çözümü göster
function createAccount(initial) {
  let balance = initial;
  return {
    deposit: function(amount) { balance += amount; return balance; },
    withdraw: function(amount) {
      if (balance < amount) {
        throw new Error("Yetersiz bakiye");
      }
      balance -= amount;
      return balance;
    },
    getBalance: function() { return balance; }
  };
}

const acc = createAccount(100);
console.log(acc.withdraw(50));

Kendini test et

  1. Kavramları eşleştir

    closure
    Yakalanan değişkeni anımsar
    IIFE
    Tanımlandığı anda çalışır
    module pattern
    Özel durumu korur
    factory function
    Fonksiyon üretir
    let in loop
    Tuzaktan korur
  2. Bakiyeyi oku

    function createAccount(initial) {
      let balance = initial;
      return {
        getBalance: function() { return ____; }
      };
    }
    Cevabı göster
    function createAccount(initial) {
      let balance = initial;
      return {
        getBalance: function() { return balance; }
      };
    }

Orta seviye bölümündeki tüm dersler