Module pattern
Closure ile özel değişkenleri dışarıdan koruyan modül desenini öğrenirsin.
Module deseni
Module deseni, IIFE ile nesne döndürmeyi birleştirir. IIFE özel durumu sarar, döndürülen nesne yalnızca herkese açık metodları (public API) içerir.
Örneğin let count = 0 IIFE içinde kalır; dışarıdaki kod counter.increment() çağırabilir ama count'a doğrudan erişemez. Özel değişken (private variable) korunur.
Revealing module
Bir varyant, revealing module desenidir. IIFE içinde tüm yardımcı fonksiyonları normal biçimde tanımlarsın; sonunda döndürülen nesne yalnızca dışarı açmak istediklerini gösterir.
Bu, hangi metodların herkese açık olduğunu tek bir yerde toplar. Okunabilirlik artar; özel yardımcılar gizli kalır ve istersen bir metodun adını değiştirip dışarıdaki adını sabit tutabilirsin.
Uygulama Sayaç modülü yaz
counter adlı bir modülü IIFE ile yaz. IIFE içinde özel let count = 0 tutulsun. Döndürülen nesnede increment (sayacı bir artırıp döndürür) ve get (sayacı döndürür) metodları olsun. IIFE (function() { ... })() biçiminde çağrılsın.
Örnek çözümü göster
const counter = (function() {
let count = 0;
return {
increment: function() { count++; return count; },
get: function() { return count; }
};
})();
Kendini test et
-
Module deseninde özel değişken nerede yaşar?
- Global kapsamda
- Döndürülen nesnede herkese açık
- Hiçbir yerde, otomatik silinir
- IIFE'nin kapanışında, dışarıdan erişilemez
Cevabı göster
IIFE'nin kapanışında, dışarıdan erişilemez — Doğru. Özel değişken IIFE kapsamında hapsolur; yalnızca döndürülen metodlar üzerinden dolaylı erişilebilir.
-
Module kavramlarını eşleştir
- module pattern
- IIFE nesne döndürerek durumu korur
- private variable
- Dışarıdan erişilemeyen değişken
- public API
- Dışarıdan çağrılabilen metodlar
- revealing module
- Açılacakları sonda toplar
-
Doğru metod seç
const counter = (function() { let count = 0; return { get: ____, increment: function() { count++; } }; })();Cevabı göster
const counter = (function() { let count = 0; return { get: function() { return count; }, increment: function() { count++; } }; })();