Junior
JavaScript'te değişkenleri tanımlamanın hangi yolları vardır? Bu yöntemler arasındaki farkları belirtiniz.
sobes.tech yapay zeka
AI'dan gelen yanıt
JavaScript'te değişkenler üç şekilde bildirilebilir: var, let, const.
Aralarındaki farklar:
| Fark | var |
let |
const |
|---|---|---|---|
| Kapsam | Fonksiyonel | Blok | Blok |
| Yeniden tanımlama | Mümkün | Mümkün | Mümkün değil |
| Yeniden atama | Mümkün | Mümkün | Mümkün değil |
| Hoisting | Deklarasyonu ve başlatmayı undefined yapar |
Deklarasyonu yukarı taşır, ama başlatmayı taşımaz | Deklarasyonu yukarı taşır, ama başlatmayı taşımaz |
Örnekler:
// var
function ornekVar() {
var x = 10; // Fonksiyonel kapsam
if (true) {
var x = 20; // Aynı fonksiyon içinde yeniden tanımlama mümkün
console.log(x); // 20
}
console.log(x); // 20 (if içindeki x burada erişilebilir)
}
console.log(x); // Hata: ReferenceError: x tanımlı değil (x fonksiyon dışında görünür değil)
// Hoisting var ile
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function ornekLet() {
let y = 10; // Blok kapsamı
if (true) {
let y = 20; // Aynı blok içinde yeniden tanımlama mümkün değil
console.log(y); // 20 (başka bir y değişkeni)
}
console.log(y); // 10 (blok dışındaki y değişkeni)
}
console.log(y); // Hata: ReferenceError: y tanımlı değil
// Hoisting let ile
// console.log(b); // Hata: ReferenceError: 'b'ye erişim mümkün değil, tanımlamadan önce
let b = 5;
console.log(b); // 5
// const
function ornekConst() {
const z = 10; // Blok kapsamı
// z = 20; // Hata: TypeError: Sabit değişkene atama. (Yeniden atama mümkün değil)
if (true) {
const z = 20; // Aynı blok içinde yeniden tanımlama mümkün değil
console.log(z); // 20 (başka bir z değişkeni)
}
console.log(z); // 10 (blok dışındaki z değişkeni)
}
console.log(z); // Hata: ReferenceError: z tanımlı değil
// Hoisting const ile
// console.log(c); // Hata: ReferenceError: 'c'ye erişim mümkün değil, tanımlamadan önce
const c = 5;
console.log(c); // 5
// Const ile tanımlanan nesne ve dizilerin içeriği değiştirilebilir
const obj = { name: 'Test' };
obj.name = 'Yeni Test'; // Mümkün
// obj = { name: 'Başka Test' }; // Hata