İçeriğe atla

Yazılım

JavaScript'te Değişkenler: var, let ve const

Üç farklı anahtar kelime, üç farklı davranış. Hangisini ne zaman kullanman gerektiğini kısa kod örnekleriyle öğren.

Zenka Dijital Ekibi 3 dk okuma

Renkli kod satırları içeren bir kod düzenleyici penceresi

JavaScript'te bir değeri saklamak istediğinde onu bir değişkene koyarsın. Bunun için üç anahtar kelime var: var, let ve const. Üçü de "bir değişken oluştur" anlamına gelir, ama davranışları farklıdır. Bu farkları bilmek, ileride saatlerce arayacağın hataları baştan önler.

Kısa cevap

  • Değeri değişmeyecekse → const
  • Değeri sonradan değişecekse → let
  • var → Eski kodlarda görürsün; yeni kodda kullanmana gerek yok.

Şimdi nedenlerine bakalım.

const: Sabit bağlantı

const ile oluşturduğun değişkene sonradan başka bir değer atayamazsın:

const siteAdi = "Zenka Dijital";
siteAdi = "Başka Bir Ad";   // ❌ Hata: Assignment to constant variable.

Bu bir kısıtlama değil, bir güvencedir. Kodu okuyan kişi (ileride sen de olabilirsin) bu değerin hiç değişmeyeceğini hemen anlar.

Dikkat: const değişkeni yeniden atamayı engeller, içindeki nesneyi dondurmaz. Bir listeye eleman ekleyebilir ya da bir nesnenin özelliğini değiştirebilirsin:

const kategoriler = ["Web Tasarımı", "Yazılım"];
kategoriler.push("Yapay Zekâ");   // ✅ Çalışır: liste aynı, içeriği değişti
kategoriler = [];                 // ❌ Hata: yeni bir liste atanamaz

let: Değişebilen değer

Bir sayaç, bir toplam ya da kullanıcının seçimi gibi değişecek değerler için let kullanırsın:

let okunanYazi = 0;
okunanYazi = okunanYazi + 1;   // ✅ 1
okunanYazi += 1;               // ✅ 2

Kapsam: Değişken nerede yaşar?

En önemli fark kapsam (scope), yani değişkenin kodun hangi bölümünden erişilebilir olduğudur.

let ve const blok kapsamlıdır: Süslü parantezler { } içinde tanımlandılarsa sadece orada yaşarlar.

if (true) {
  let mesaj = "Merhaba";
  console.log(mesaj);   // ✅ "Merhaba"
}
console.log(mesaj);     // ❌ Hata: mesaj is not defined

var ise fonksiyon kapsamlıdır: if ya da for bloklarını tanımaz ve dışarı sızar.

if (true) {
  var mesaj = "Merhaba";
}
console.log(mesaj);     // "Merhaba" — blok bitti ama değişken hâlâ yaşıyor

Küçük bir kodda zararsız görünebilir, ama büyük bir projede aynı adla iki farklı yerde tanımlanan var değişkenleri birbirinin üzerine yazar ve bulunması zor hatalara yol açar.

Tanımlamadan önce kullanmak

var ile tanımlanan bir değişkeni, tanımlandığı satırdan önce kullanmaya çalışırsan hata almazsın; değeri undefined olur. Buna hoisting (yukarı taşıma) denir:

console.log(puan);   // undefined (hata yok, ama yanlış)
var puan = 10;

console.log(skor);   // ❌ Hata: Cannot access 'skor' before initialization
let skor = 10;

İlk bakışta var daha "hoşgörülü" gibi görünse de aslında bir hatayı saklıyor. let ve const ise sorunu hemen gösterir. Hatayı erken görmek her zaman daha iyidir.

Döngülerdeki fark

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 100);
}
// 0, 1, 2  ✅  (her tur kendi i'sine sahip)

for (var j = 0; j < 3; j++) {
  setTimeout(() => console.log(j), 100);
}
// 3, 3, 3  😕  (hepsi aynı j'yi paylaşıyor)

Özet tablo

Özellikconstletvar
Yeniden atanabilir mi?HayırEvetEvet
KapsamBlokBlokFonksiyon
Tanımlamadan önce kullanılırsaHataHataundefined
Yeni kodda önerilir mi?Evet (varsayılan)Evet (gerekirse)Hayır

Kural basit: Her değişkene önce const ile başla. Değerini değiştirmen gerektiğini fark edersen let'e çevir.