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
İçindekiler
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
| Özellik | const | let | var |
|---|---|---|---|
| Yeniden atanabilir mi? | Hayır | Evet | Evet |
| Kapsam | Blok | Blok | Fonksiyon |
| Tanımlamadan önce kullanılırsa | Hata | Hata | undefined |
| 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.
Bu yazıyı paylaş
Not: Site şu an senin bilgisayarından açılıyor; bu yüzden paylaşılan bağlantıyı başkaları açamaz. Site yayına alındığında gerçek adresle çalışacak.