crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
JavaScript öğrenmeye başlayan herkesin karşısına çıkan ilk yol ayrımı şudur: "Bir değişkeni tanımlarken hangi anahtar kelimeyi kullanmalıyım?" Eskiden sadece var vardı ve hayat nispeten daha basitti (veya biz öyle sanıyorduk). Ancak 2015 yılında gelen ES6 (ECMAScript 2015) güncellemesi ile hayatımıza let ve const girdi.
Peki, neden üç farklı yöntem var? Modern JavaScript projelerinde neden artık neredeyse hiç var görmüyoruz? Bu rehberde, bu üçlü arasındaki kritik farkları, kapsam (scope) mantığını ve neyi nerede kullanmanız gerektiğini inceleyeceğiz.
Bu üç anahtar kelime arasındaki en temel fark, değişkenin "nerede yaşadığı" ile ilgilidir.
Kod yazarken bir değişkeni yanlışlıkla tekrar tanımlamak büyük bir felakete yol açabilir.
JavaScript, kodları çalıştırmadan önce değişken tanımlamalarını en tepeye taşır. Ancak bu durum üçü için farklı sonuçlar doğurur:
Aşağıdaki kod blokları, bu farkların pratikte nasıl çalıştığını net bir şekilde anlamanızı sağlayacaktır:
Hangi durumda hangisini kullanacağınızı hızlıca seçmek için bu tabloya göz atabilirsiniz:
Modern JavaScript (Clean Code) standartlarına göre altın kural şudur:
Sonuç
JavaScript'in evrimi, dili daha katı ama daha güvenli bir hale getirdi. let ve const kullanarak, global kapsamı kirletmeden ve karmaşık hatalarla uğraşmadan çok daha temiz kodlar yazabilirsiniz.
Peki, neden üç farklı yöntem var? Modern JavaScript projelerinde neden artık neredeyse hiç var görmüyoruz? Bu rehberde, bu üçlü arasındaki kritik farkları, kapsam (scope) mantığını ve neyi nerede kullanmanız gerektiğini inceleyeceğiz.
1. Kapsam (Scope) Mantığı: Function Scope vs Block Scope
Bu üç anahtar kelime arasındaki en temel fark, değişkenin "nerede yaşadığı" ile ilgilidir.
[]var (Function Scope): Bir fonksiyonun içinde tanımlandığında sadece o fonksiyonun içinden erişilebilir. Ancak bir if bloğu veya for döngüsü içinde tanımlanırsa, o bloğun dışından da erişilebilir. Bu durum çoğu zaman beklenmedik hatalara yol açar.
[]let ve const (Block Scope): Sadece tanımlandıkları süslü parantezler { } (if, for, while, function vb.) içinde geçerlidirler. Bloğun dışına çıktığınızda o değişken artık yoktur.
2. Yeniden Tanımlama ve Güncelleme
Kod yazarken bir değişkeni yanlışlıkla tekrar tanımlamak büyük bir felakete yol açabilir.
[]var: Aynı isimle tekrar tekrar tanımlanabilir. JavaScript motoru buna kızmaz, en son tanımı kabul eder.
[]let: Aynı kapsam (scope) içerisinde aynı isimle tekrar tanımlanamaz. Ancak değeri güncellenebilir.- const: Adı üzerinde (Constant - Sabit); ne tekrar tanımlanabilir ne de değeri sonradan değiştirilebilir.
3. Hoisting (Yukarı Çekme) Davranışı
JavaScript, kodları çalıştırmadan önce değişken tanımlamalarını en tepeye taşır. Ancak bu durum üçü için farklı sonuçlar doğurur:
[]var: Tanımlanmadan önce çağrılırsa hata vermez, undefined döner.
[]let ve const: Tanımlanmadan önce çağrılırsa "Temporal Dead Zone" (Geçici Ölü Bölge) nedeniyle hata fırlatır. Kodunuzun daha güvenli olmasını sağlar.
Kod Örnekleri ile Karşılaştırma
Aşağıdaki kod blokları, bu farkların pratikte nasıl çalıştığını net bir şekilde anlamanızı sağlayacaktır:
JavaScript:
// --- VAR ÖRNEĞİ ---
if (true) {
var forumName = "XenForo Türkiye";
}
console.log(forumName); // Çıktı: "XenForo Türkiye" (Çünkü block scope değil!)
// --- LET ÖRNEĞİ ---
if (true) {
let username = "Gemini";
console.log(username); // Çıktı: "Gemini"
}
// console.log(username); // HATA! username is not defined.
// --- CONST ÖRNEĞİ ---
const pi = 3.14;
// pi = 3; // HATA! Sabit bir değere tekrar atama yapılamaz.
// --- CONST VE OBJELER ---
// Dikkat: const ile tanımlanan bir objenin içindeki özellikleri değiştirebilirsiniz!
const user = { id: 1, name: "Ahmet" };
user.name = "Mehmet"; // Bu mümkündür.
// user = { id: 2 }; // Bu HATA verir!
Özet Karşılaştırma Tablosu
Hangi durumda hangisini kullanacağınızı hızlıca seçmek için bu tabloya göz atabilirsiniz:
| Özellik | var | let | const |
|---|---|---|---|
| Kapsam (Scope) | Function Scope | Block Scope | Block Scope |
| Yeniden Atama (Re-assign) | Evet | Evet | Hayır |
| Yeniden Tanımlama | Evet | Hayır | Hayır |
| Hoisting | Undefined döner | Hata verir | Hata verir |
Hangi Durumda Hangisini Kullanmalıyım?
Modern JavaScript (Clean Code) standartlarına göre altın kural şudur:
[]Varsayılan olarak const kullanın. Değerin değişmeyeceğinden eminseniz kodunuzun okunabilirliğini ve güvenliğini artırır.
[]Eğer bir değişkenin değerini daha sonra değiştirecekseniz (örneğin bir döngü sayacı veya bir matematiksel işlem sonucu) let kullanın.- var kullanımından kaçının. Modern projelerde var kullanmak, hata yapma riskini artıran eski bir alışkanlıktır.
Küçük Bir İpucu: const kullanmak sadece bir kısıtlama değil, aynı zamanda kodunuzu okuyan diğer geliştiricilere (veya 6 ay sonraki kendinize) "Bu değerin asla değişmemesi gerekiyor, ona göre güvenebilirsin" mesajını verir.
Sonuç
JavaScript'in evrimi, dili daha katı ama daha güvenli bir hale getirdi. let ve const kullanarak, global kapsamı kirletmeden ve karmaşık hatalarla uğraşmadan çok daha temiz kodlar yazabilirsiniz.