# Closure (Kapanış)

Adres: https://softwaredictionary.org/tr/terimler/closure
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-29
Okunuşu: klojır

Kısaca: Closure, oluşturulduğu kapsamdaki değişkenleri hatırlayan bir fonksiyondur; dıştaki fonksiyon sona erdikten sonra bile bu değişkenleri kullanabilir.

## Closure nedir?

Closure, bir fonksiyon başka bir fonksiyonun içinde tanımlanıp o dış fonksiyonun değişkenlerini kullandığında oluşur. İçteki fonksiyon bu değişkenlerin kopyasını değil referansını tutar; bu sayede dış fonksiyon işini bitirdikten sonra bile onları okuyabilir ve güncelleyebilir. JavaScript'te her fonksiyon, tanımlandığı kapsam üzerinde bir closure oluşturur.

Closure'lar sözcüksel kapsam (lexical scoping) sayesinde çalışır. Bu, bir fonksiyonun değişkenlere erişiminin nereden çağrıldığına değil, kodda nerede yazıldığına göre belirlenmesi demektir. Dış fonksiyon bittiğinde değişkenleri normalde atılırdı; ancak içteki bir fonksiyon hâlâ onlara başvuruyorsa bellekte yaşamaya devam ederler.

Closure için yararlı bir benzetme sırt çantasıdır: bir fonksiyon oluşturulduğunda çevresindeki değişkenleri çantasına koyar ve gittiği her yere taşır. Closure'lar özel durum (dışarıdaki kodun doğrudan erişemediği veri), fonksiyon fabrikaları, olay işleyicileri ve bağlamı hatırlaması gereken callback'ler için kullanılır.

Closure sıklıkla callback ile karıştırılır. Callback, daha sonra çağrılmak üzere başka bir fonksiyona verilen fonksiyondur; closure ise bir fonksiyonun çevresindeki değişkenleri hatırlamasıyla ilgilidir. Birçok callback aynı zamanda bir closure'dır, ancak iki terim farklı fikirleri anlatır.

## Önemli noktalar

- Closure, bir fonksiyon ile onun çevre kapsamdan yakaladığı değişkenlerin bütünüdür.
- Yakalanan değişkenler, closure var olduğu sürece yaşamaya devam eder.
- Closure'lar değişkenleri referansla yakalar, bu yüzden her zaman en son değeri görür.
- Özel durum, fonksiyon fabrikaları ve bağlamı hatırlayan callback'ler için olanak sağlar.

## Örnek: Closure ile yazılmış bir sayaç

```javascript
// makeCounter returns a function that "closes over" count
function makeCounter() {
  let count = 0; // private: not reachable from outside
  return function () {
    count += 1;  // the inner function still has access
    return count;
  };
}

const counter = makeCounter();
counter(); // 1
counter(); // 2 (count was remembered between calls)
```

## Sık sorulan sorular

**Closure'lar neden yararlıdır?**

Closure'lar, bir fonksiyonun global değişken kullanmadan çağrılar arasında özel durum tutmasını sağlar. Sayaçlar, memoization (sonuçları önbelleğe alma) ve hangi veriye ait olduğunu hatırlayan olay işleyicileri gibi kalıpların temelidir.

**Closure ile callback arasındaki fark nedir?**

Callback, daha sonra çağrılabilsin diye başka bir fonksiyona verdiğiniz fonksiyondur. Closure ise oluşturulduğu yerdeki değişkenleri hatırlayan fonksiyondur; callback çoğu zaman bir closure'dır, ancak terimler farklı şeyleri anlatır.

**Closure'lar bellek sızıntısına yol açabilir mi?**

Hiç kaldırılmayan bir olay dinleyicisi gibi uzun ömürlü bir closure, artık gerekmeyen büyük nesnelere referans tutmaya devam ediyorsa açabilir. Kullanılmayan dinleyicileri kaldırmak ve gereksiz yakalanan verilerden kaçınmak bunu önler.

## Kaynaklar

- [MDN: Closures](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
