
Referans ve Değer
En sinsi hata kaynağı. İlkel tipler kopyalanır, nesneler referansla paylaşılır.
JavaScript:
let a = { sayi: 1 };
let b = a; // aynı nesneyi işaret eder
b.sayi = 99;
console.log(a.sayi); // 99 (!!) 😱
let x = 1;
let y = x; // değer kopyalanır
y = 99;
console.log(x); // 1 ✅
Sığ kopya için yayma operatörü, derin kopya için
structuredClone(nesne) kullan.
Closure (Kapanış)
Bir fonksiyonun, doğduğu ortamı hatırlaması.
JavaScript:
function sayacYap() {
let sayi = 0;
return function () {
sayi++;
return sayi;
};
}
const say = sayacYap();
say(); // 1
say(); // 2 — "sayi" hâlâ yaşıyor!
Özel (private) değişken oluşturmada, olay dinleyicilerinde, throttle/debounce yazarken.
Özyineleme (Recursion)
Kendini çağıran fonksiyon. İki şey şart: taban durumu ve küçülen problem. Her çağrıda problemin küçüldüğünden ve taban durumuna ulaşıldığından emin ol. Aksi halde stack overflow!
Asenkron Programlama
Kodun sırayla değil, "hazır olduğunda" çalışması.
JavaScript:
// Yanlış: veri henüz gelmedi
const veri = fetch('/api'); // Promise döner!
// Doğru:
const cevap = await fetch('/api');
const veri2 = await cevap.json();
Kapsam (Scope) ve Hoisting
var fonksiyon kapsamlı, let ve const blok kapsamlı. Artık
var kullanma. Varsayılan const, değişecekse let.
Bellek: Stack ve Heap
Kod:
Stack Heap
----------------- ---------------------
Hızlı erişim Dinamik boyut
Otomatik temizlik Çöp toplayıcı (GC)
İlkel tipler Nesne, dizi, fonksiyon
Mutability (Değişebilirlik)
Modern kod değiştirmez (immutable) yaklaşımı sever.
JavaScript:
// Mutasyon (riskli)
dizi.push(5);
// Değiştirmeyen (güvenli)
const yeni = dizi.concat(5);
Mini Sınav
Aşağıdaki kod ne yazdırır?
JavaScript:
const liste = [1, 2, 3];
const kopya = liste;
kopya.push(4);
console.log(liste.length);
4 — çünkü kopya aynı diziyi işaret ediyor, kopyası değil! Gerçek kopya için yayma operatörü gerekir.
Öğrenme Sırası Önerisi
- Önce: Değer/referans, kapsam
- Sonra: Closure, asenkron
- En son: Bellek modeli, immutability
Ekli dosyalar
Son düzenleme: