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 ]