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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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:
1 2 3 4 |
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.
1 2 3 4 5 6 7 8 9 10 11 |
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.
1 2 3 |
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.
1 2 3 |
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.
1 2 3 |
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.