Closure nedir?
Bir fonksiyonun tanımlandığı kapsamdaki değişkenlere nasıl erişmeye devam ettiğini öğrenirsin.
Closure nedir?
Closure, tanımlandığı kapsamdaki değişkenleri hatırlayan bir fonksiyondur. Dış fonksiyon çalışmasını bitirmiş olsa bile, iç fonksiyon dış değişkenlere erişmeye devam eder. Çünkü JavaScript'te her fonksiyon, tanımlandığı ortamı (lexical environment) yanında taşır.
Örneğin bir dış fonksiyon içinde let count = 0 tanımlayıp bir iç fonksiyon döndürebilirsin. Dış fonksiyon bittikten sonra bile iç fonksiyon count'a ulaşır.
Lexical environment
Her fonksiyon, tanımlandığı kapsama bir lexical environment referansı saklar. Fonksiyon çağrıldığında değişken aramayı önce kendi yerel kapsamından, sonra bu saklanan kapsamdan yapar.
Bu yüzden dış fonksiyon bitse bile, onun yerel değişkeni yaşar — çünkü iç fonksiyon ona referans tutar. Closure tam olarak budur: yakalanan (captured) değişken ile fonksiyon arasındaki bağ.
Uygulama Selamlayıcı üret
makeGreeter(message) adında bir fonksiyon tanımla. Bir iç fonksiyon döndürsün; iç fonksiyon çağrıldığında console.log(message) yapsın. Sonra makeGreeter'ı bir karşılama metniyle çağır, sonucu greet değişkenine ata ve greet() ile çağır.
Örnek çözümü göster
function makeGreeter(message) {
return function() {
console.log(message);
};
}
const greet = makeGreeter("Merhaba");
greet();
Kendini test et
-
Bir closure değişkeni ne zaman yakalar?
- Tanımlandığı kapsamdan, o kapsam bitse bile
- Yalnızca çağrıldığı anki kapsamdan
- Yalnızca global kapsamdan
- Hiçbir kapsamdan, yalnız kendi yerellerini kullanır
Cevabı göster
Tanımlandığı kapsamdan, o kapsam bitse bile — Doğru. Closure, tanımlandığı kapsamı hatırlar; dış fonksiyon bitse bile o değişkene erişir.
-
Closure yapısını tamamla
function makeGreeter(message) { return ____() { console.log(message); }; }Cevabı göster
function makeGreeter(message) { return function() { console.log(message); }; } -
Terimleri eşleştir
- closure
- Yakalanan değişkeni anımsar
- lexical environment
- Tanımlandığı kapsam
- captured variable
- Eriştiği dış değişken