Özet - Closure
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
-
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
-
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; } }; }