CodeBlanks Logo Icon CodeBlanks

Closure nedir?

JavaScript kursu · Orta seviye · Ders 13/134

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

  1. 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.

  2. Closure yapısını tamamla

    function makeGreeter(message) {
      return ____() {
        console.log(message);
      };
    }
    Cevabı göster
    function makeGreeter(message) {
      return function() {
        console.log(message);
      };
    }
  3. 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

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