Kapanımların Durumu Nasıl Yakaladığı
Kapanımların sözcüksel ortamını anlayın.
Kapanımların Durumu Nasıl Yakaladığı, CoddyKit'te ücretsiz bir JavaScript Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, JavaScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. JavaScript Academy kursu toplamda 4 dersten oluşur.
Kapanım Nedir
Kapanım, tanımlandığı kapsamdaki değişkenlere yapılan başvurularla birlikte paketlenmiş bir işlevdir. İç işlev, dış işlev döndükten sonra bile bu değişkenleri “hatırlar”.
function outer() {
const message = "hello";
function inner() {
console.log(message); // sees outer variable
}
inner();
}
outer(); // "hello"İç İşlevi Döndürme
Asıl özellik, iç işlevi döndürdüğünüzde ortaya çıkar. outer çalışmasını çoktan tamamlamış olsa da iç işlev, dış değişkene erişmeye devam eder.
function outer() {
const message = "remembered";
return function () {
console.log(message);
};
}
const fn = outer();
fn(); // "remembered"Leksik Kapsam
Kapanımlar leksik kapsamlandırma sayesinde çalışır: Bir işlev, çağrıldığı yerdeki değil, kaynak kodunda fiziksel olarak kendisini çevreleyen kapsamlarda tanımlanan değişkenlere erişebilir.
const x = 10;
function show() {
console.log(x); // resolves where defined
}
function run() {
const x = 99;
show(); // still logs 10, not 99
}
run();Başvuruyla Yakalama
Kapanım, değerin anlık görüntüsünü değil, değişkenin kendisini yakalar. Değişken daha sonra değişirse kapanım yeni değeri görür.
function make() {
let count = 0;
const get = () => count;
count = 5; // changed after get defined
return get;
}
console.log(make()()); // 5Her Çağrı Yeni Bir Kapsam Oluşturur
Dış işlevin her çağrılması yeni bir değişken kümesi oluşturur. Farklı çağrılardan gelen kapanımlar durumu paylaşmaz.
function counter() {
let n = 0;
return () => ++n;
}
const a = counter();
const b = counter();
console.log(a(), a()); // 1 2
console.log(b()); // 1 (independent)Parametreleri Kapsayan Kapanımlar
İşlev parametreleri de yakalanır. Bu, genel bir işlevden özelleştirilmiş işlevler oluşturmanızı sağlar.
function adder(x) {
return (y) => x + y;
}
const add5 = adder(5);
console.log(add5(3)); // 8
console.log(add5(10)); // 15Klasik Döngü Tuzağı
Ünlü bir hata: Döngüde var kullanmak, tüm kapanımlar arasında tek bir değişken paylaşır. Çalıştıkları zamana gelindiğinde döngü tamamlanmıştır ve hepsi son değeri görür.
const fns = [];
for (var i = 0; i < 3; i++) {
fns.push(() => i);
}
console.log(fns[0](), fns[1](), fns[2]()); // 3 3 3let ile Düzeltme
let her yinelemede yeni bir bağlama oluşturur; böylece her kapanım kendi i değişkenini yakalar. Modern çözüm budur.
const fns = [];
for (let i = 0; i < 3; i++) {
fns.push(() => i);
}
console.log(fns[0](), fns[1](), fns[2]()); // 0 1 2Kapanımlar Belleği Canlı Tutar
Bir kapanım var olduğu sürece, yakaladığı değişkenler çöp toplama işlemiyle geri kazanılamaz. Bu genellikle sorun oluşturmaz, ancak kapanımları gerekenden uzun süre tutarsanız bellek sızıntılarına yol açabilir.
function make() {
const big = new Array(3).fill("data");
return () => big.length;
}
const f = make();
console.log(f()); // 3 - big stays in memory via fKapanımlar Her Yerdedir
Geri çağırma işlevleri, olay işleyicileri, setTimeout, dizi yöntemleri ve vaatlerin tümü bağlamı hatırlamak için kapanımlara dayanır. Çoğu zaman fark etmeden onları sürekli kullanırsınız.
function greet(name) {
return () => console.log("Hi " + name);
}
[greet("Ada"), greet("Bob")].forEach((fn) => fn());
// Hi Ada
// Hi BobYakalanan Durumu İnceleme
Aynı çağrıdan oluşturulan birden çok kapanım, aynı yakalanan değişkenleri paylaşır; bu nedenle biri diğerinin yazdığı değeri okuyabilir.
function pair() {
let value = 0;
return {
set: (v) => { value = v; },
get: () => value
};
}
const p = pair();
p.set(42);
console.log(p.get()); // 42Hızlı Kontrol
Kapanımların durumu nasıl yakaladığı.
Özet
Kapanım, bir işlev ile onu tanımlayan kapsama yapılan başvuruların birleşimidir. Sözcüksel kapsam sayesinde, dış işlev döndükten sonra dış değişkenleri hatırlar ve onları değer olarak değil, başvuru yoluyla yakalar. Her dış işlev çağrısı bağımsız bir kapsam oluşturur; döngü tuzağından kaçınmak için let kullanın. Kapanımlar, yakalanan belleği canlı tutar ve her yerdeki geri çağırma işlevlerine güç verir.
Sıkça Sorulan Sorular
“Kapanımların Durumu Nasıl Yakaladığı” dersi ücretsiz mi?
Evet — “Kapanımların Durumu Nasıl Yakaladığı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve JavaScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. JavaScript Academy kursu toplamda 4 dersten oluşur.
“Kapanımların Durumu Nasıl Yakaladığı” dersinde ne öğreneceğim?
Kapanımların sözcüksel ortamını anlayın. JavaScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
JavaScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te JavaScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Kapanımların Durumu Nasıl Yakaladığı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu JavaScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her JavaScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Kapanımların Durumu Nasıl Yakaladığı
- Kapanımlarla Özel Değişkenler
- Modül Deseni (IIFE)
- Fabrika İşlevleri