Özet - Closure
- JavaScript kursu
- Orta seviye
- Ders 18/134
- 5 dk
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.
Başlangıç kodu
// createAccount fonksiyonunu tanımla
// initial parametresi ile balance'ı başlat
// deposit, withdraw ve getBalance metodlarını döndür
// 100 başlangıçlı bir hesap oluştur ve test etÖrnek çözüm
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.
Başlangıç kodu
function createAccount(initial) {
let balance = initial;
return {
deposit: function(amount) { balance += amount; return balance; },
withdraw: function(amount) {
// Bakiye yetersizse hata fırlat
balance -= amount;
return balance;
},
getBalance: function() { return balance; }
};
}
const acc = createAccount(100);
console.log(acc.withdraw(50));Örnek çözüm
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));Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kavramları eşleştir
| Kavram | Anlamı |
|---|---|
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 ____; }
};
}
function createAccount(initial) {
let balance = initial;
return {
getBalance: function() { return balance; }
};
}
Açıklama: getBalance, yakalanan balance değişkenini döndürür.