JavaScript’te “var”, “let” ve “const” Arasındaki Farklar Nelerdir?
JavaScript’te var
, let
ve const
, değişkenleri tanımlamak için kullanılan anahtar kelimelerdir. Ancak aralarında önemli farklar bulunur. Bu farklar, genel hatlarıyla kapsam (scope), hoisting, ve yeniden atama kuralları üzerine kuruludur.
Kapsam (Scope) Farkları
var: Fonksiyon kapsamlıdır (function-scoped). Yani, var
ile tanımlanan bir değişken, tanımlandığı fonksiyon içerisinde her yerden erişilebilir. Fonksiyon dışında tanımlanırsa, global kapsamda olur. Örneğin:
if (true) {
var x = 5;
}
console.log(x); // 5 çıktısını verir.
function myFunction() {
var insideVar = "Fonksiyon içinde tanımlandı";
console.log(insideVar); // Fonksiyon içinde tanımlandı
}
myFunction();
console.log(insideVar); // Hata verir, insideVar tanımlı değil
var outsideVar = "Global kapsamda tanımlandı";
function anotherFunction() {
console.log(outsideVar); // Global kapsamda tanımlandı
}
anotherFunction();
console.log(outsideVar); // Global kapsamda tanımlandı
let ve const: Blok kapsamlıdır (block-scoped). Yani, bu anahtar kelimelerle tanımlanan değişkenler, sadece tanımlandıkları blok içerisinde (örneğin bir if bloğu, for döngüsü) erişilebilir. Örneğin:
if (true) {
let y = 5;
}
console.log(y); // Hata verir, y tanımlı değil.
Hoisting Farkları
- var: Hoisting’e tabidir.
var
ile tanımlanan değişkenler, tanımlı oldukları kapsamın başına çıkarılır (hoisted), ancak değer ataması yapılmaz. - let ve const: Hoisting’e teknik olarak tabidirler, ama “temporal dead zone” nedeniyle, tanımlandıkları satıra kadar erişilemezler.
console.log(varVariable); // undefined
var varVariable = "Var ile tanımlanmış";
console.log(varVariable); // Var ile tanımlanmış
console.log(letVariable); // Hata verir: Cannot access 'letVariable' before initialization
let letVariable = "Let ile tanımlanmış";
console.log(letVariable); // Let ile tanımlanmış
console.log(constVariable); // Hata verir: Cannot access 'constVariable' before initialization
const constVariable = "Const ile tanımlanmış";
console.log(constVariable); // Const ile tanımlanmış
Yeniden Atama ve Yeniden Tanımlama
var: Hem yeniden atamaya hem de yeniden tanımlamaya izin verir.
var z = 1;
var z = 2; // Geçerli
z = 3; // Geçerli
let: Yeniden atamaya izin verir, ama aynı kapsam içinde yeniden tanımlanamaz.
let a = 1;
// let a = 2; // Hata verir, a zaten tanımlı
a = 3; // Geçerli
const: Hem yeniden atamaya hem de yeniden tanımlamaya izin vermez. Sabit bir değer tanımlamak için kullanılır.
const b = 1;
// const b = 2; // Hata verir, b zaten tanımlı
// b = 3; // Hata verir, b sabittir ve değiştirilemez
Bu farklar, var
, let
, ve const
‘ın kullanım yerlerini ve amaçlarını belirler. Genel olarak, let
ve const
, modern JavaScript kodlarında tercih edilir çünkü daha katı kapsam kuralları sayesinde yanlışlıkla yapılabilecek hataları azaltırlar. const
, değişmeyecek değerler için kullanılırken; let
, değeri değişebilecek değişkenler için kullanılır. var
ise eski JavaScript kodlarında sıkça rastlanır ve daha esnek bir kapsam ve yeniden tanımlama imkanı sunar.