JavaScript Core
Modern JS:
var, let ve const'un Derinlikleri
Soru basit görünebilir ama cevabınız JS motorunun çalışma mantığını (Hoisting, Scope, TDZ) ne kadar bildiğinizi ele verir.
01. Scope (Kapsam) Yönetimi
var function-scoped'dur, yani tanımlandığı fonksiyonun her yerinden erişilebilir ama blokları (if, for) tanımaz. let ve const ise block-scoped'dur. Modern yazılım geliştirmede "Least Privilege" (En Az Yetki) prensibi gereği değişkenlerin yaşam döngüsünü mümkün olduğunca kısıtlı tutmak isteriz.
// Function Scope (var)
if (true) {
var x = "Ben dışarı sızarım";
}
console.log(x); // Çıktı: "Ben dışarı sızarım"
// Block Scope (let/const)
if (true) {
let y = "Ben güvendeyim";
}
console.log(y); // ReferenceError: y is not defined
02. Hoisting & Temporal Dead Zone (TDZ)
Önemli Detay: Mülakatlarda "let hoist edilmez" derseniz yanılırsınız. let ve const da hoist edilir, ancak initialize edilmezler. Bu yüzden tanımlandıkları satıra gelene kadar erişilemezler. Bu bölgeye Temporal Dead Zone (TDZ) denir.
console.log(a); // undefined (Hoisted & Initialized)
var a = 1;
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 2;
// 'b' hoist edildi ama TDZ içinde.
03. Neden Default Olarak `const`?
Kod okuyan bir geliştirici için const bir taahhüttür: "Bu referans değişmeyecek". Bu, bilişsel yükü (cognitive load) azaltır. Değişkenin nerede değiştiğini takip etmek zorunda kalmazsınız.
- const: Varsayılan tercih. Referans güvenliği sağlar.
- let: Sadece sayaçlar veya gerçekten değişmesi gereken değerler için.
- var: Legacy kodlar dışında asla kullanılmamalı.