Ana içeriğe geç

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ı.