Ana içeriğe geç
Modül 4 · Ders 4 ders 4Kurstaki 16/32~12 min
Modül dersleri (4/4)

Kapanışlar ve kapsam

kapama, tanımlandığı kapsamın değişkenlerini "hatırlayan" bir işlevdir, bu kapsam sona erdikten sonra bile. Sihir gibi görünüyor ancak kapsam kurallarının doğrudan bir sonucudur.

Kapsam zinciri

Bir işlev, kendi dışında bildirilen değişkenleri okuyabilir ve kapsam zincirinde yukarı doğru yürüyebilir:

JS
const moltiplicatore = 10;

function moltiplicaPer10(n) {
  return n * moltiplicatore; // reads from the closure
}

moltiplicaPer10(3); // 30

Fonksiyon fabrikası

En tipik kalıp: "özelleştirilmiş" başka bir işlevi döndüren bir işlev aldığı parametreler.

JS
function creaSaluto(prefisso) {
  return function (nome) {
    return `${prefisso}, ${nome}!`;
  };
}

const ciao = creaSaluto('Ciao');
const buongiorno = creaSaluto('Buongiorno');

ciao('Anna'); // 'Ciao, Anna!'
buongiorno('Marco'); // 'Buongiorno, Marco!'

creaSaluto'a yapılan her çağrı, kendi prefisso'si olan ayrı bir kapsam oluşturur.

Özel devletli sayaç

Klasik örnek: Bir tezgahı dışarıya maruz bırakmadan tutan bir kapak.

JS
function creaContatore() {
  let n = 0;
  return function () {
    n++;
    return n;
  };
}

const c = creaContatore();
c(); // 1
c(); // 2
c(); // 3

const c2 = creaContatore();
c2(); // 1  ← isolated state!

n özeldir: kapatma dışında hiç kimse onu okuyamaz veya değiştiremez.

Deneyin

Egzersiz#js.m4.l4.e1
Denemeler: 0Yükleniyor…

Bir işlev döndüren bir fabrika `makeCounter()` uygulayın: işlevin her çağrısı, 1'den başlayarak artan bir tamsayı döndürür. Farklı sayaçlar bağımsız olmalıdır.

Düzenleyici yükleniyor…
İpucu göster

MakeCounter'da let ile n'yi bildirin, ardından ++n işlevini yapan bir işlev döndürün.

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#js.m4.l4.e2
Denemeler: 0Yükleniyor…

Bir işlevi döndüren 'makeAdderWith(base)'i uygulayın: n sayısı verildiğinde, base + n değerini döndürür. Her toplayıcı kendi tabanını hatırlar.

Düzenleyici yükleniyor…
İpucu göster

dış parametreden tabanı kullanan bir ok işlevi döndürür.

3 denemeden sonra çözüm mevcut