Sobes.tech
Junior

var, let ve const arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

var fonksiyon kapsamına sahiptir, let ve const ise blok kapsamına sahiptir. var yeniden bildirilebilir ve yeniden atanabilir, let yeniden atanabilir ancak aynı kapsamda yeniden bildirilemez, const ise ne yeniden bildirilebilir ne de yeniden atanabilir. var ile bildirilen değişkenler yükseltilir (hoisting) ve undefined ile başlatılır, let ve const da yükseltilir ancak "geçici ölüm bölgesi"nde kalır ve yalnızca başlatıldıklarında kullanılabilir.

// var fonksiyon kapsamına sahiptir
function ornekVar() {
  if (true) {
    var x = 10;
    console.log(x); // 10
  }
  console.log(x); // 10 (x burada görünür)
}

// let ve const blok kapsamına sahiptir
function ornekLetConst() {
  if (true) {
    let y = 20;
    const z = 30;
    console.log(y); // 20
    console.log(z); // 30
  }
  // console.log(y); // Hata ReferenceError: y tanımlı değil
  // console.log(z); // Hata ReferenceError: z tanımlı değil
}

// var yeniden bildirilebilir ve yeniden atanabilir
var a = 1;
var a = 2; // Yeniden bildirim
a = 3; // Yeniden atama
console.log(a); // 3

// let yeniden atanabilir, ancak aynı kapsamda yeniden bildirilemez
let b = 4;
// let b = 5; // Hata SyntaxError: 'b' zaten bildirildi
b = 6; // Yeniden atama
console.log(b); // 6

// const ne yeniden atanabilir ne de yeniden bildirilebilir
const c = 7;
// const c = 8; // Hata SyntaxError: 'c' zaten bildirildi
// c = 9; // Hata TypeError: Sabit değişkene atama.
console.log(c); // 7 (ilkel tipler için)

// Yükselme (hoisting)
console.log(hoistedVar); // undefined (var yükseltilmiş ve undefined ile başlatılmış)
var hoistedVar = "Ben var";

// console.log(hoistedLet); // Hata ReferenceError: 'hoistedLet' öncesine erişim mümkün değil
// let hoistedLet = "Ben let"; // Geçici ölüm bölgesinde

Ana farklar tablo halinde özetlenmiştir:

Özellik var let const
Kapsam Fonksiyonel Blok Blok
Yeniden bildirilebilir Evet Hayır (aynı kapsamda) Hayır
Yeniden atanabilir Evet Evet Hayır (ilkel tipler için)
Yükselme Evet (tanımlı olmayan) Evet (geçici ölüm bölgesi) Evet (geçici ölüm bölgesi)
Erken başlatma Başlatma gerekmez Başlatma gerekmez Başlatma gerekir

const ile bildirilen nesne ve dizilerde, değişken kendisi başka bir nesne/diziye atanamaz, ancak içeriği değiştirilebilir.

const nesne = { anahtar: 'değer' };
// nesne = { yeniAnahtar: 'yeniDeğer' }; // Hata TypeError: Sabit değişkene atama
nesne.anahtar = 'yeniDeğer'; // Mümkün
console.log(nesne); // { anahtar: 'yeniDeğer' }

const dizi = [1, 2];
// dizi = [3, 4]; // Hata TypeError: Sabit değişkene atama
dizi.push(3); // Mümkün
console.log(dizi); // [ 1, 2, 3 ]