TypeScript'te (modern JavaScript'te olduğu gibi) değişkenler let, const ve var kullanılarak ilan edilebilir ve bunlar arasında önemli farklılıklar vardır:
Örnek:
if (true) { let a = 10; const b = 20; var c = 30; } console.log(c); // 30 — blok dışında görünür! console.log(a); // Hata: a tanımlı değil console.log(b); // Hata: b tanımlı değil
Tipik senaryolar:
const — değişmeyecek bir değer için (sabitler, ayarlar, fonksiyon referansları).let — çalışma sırasında değişecek değerler için (sayaclar, döngü değişkenleri).var — kullanılması önerilmez, yalnızca eski kod desteği için.
constbir nesneyi tamamen değiştirilemez yapabilir mi? Açıklayın, örnek verin.
Cevap: Hayır, const yalnızca referansın değiştirilmesini engeller, ancak nesnenin özelliklerinin değiştirilmesini önlemez!
const obj = { x: 1 }; obj.x = 2; // Bu geçerlidir! obj = { x: 3 }; // Hata: yeni referans ataması
Tamimmüedililik için Object.freeze kullanılır:
const frozen = Object.freeze({ x: 1 }); frozen.x = 2; // Sıkı modda hata, ancak her zaman derleyici uyarmaz!
Hikaye
Büyük bir frontend projesinin TypeScript'e geçiş sürecinde geliştiriciler, kapsamın artık blok bazında olduğunu dikkate almadan var'ı let ile topluca değiştirdiler. Bu, bazı for döngülerindeki sayaçların döngü dışındaki erişimlerin dışında kalmasına neden oldu ve beklenmeyen mantık hatalarına yol açtı: kod, döngü tamamlandıktan sonra döngü sayacına erişim girişimlerinde çalışmamaya başladı.
Hikaye
Geliştirici, özelliklerin değişmeyeceğini düşünerek bir yapılandırma nesnesi depolamak için const ile bir sabit ilan etti. Daha sonra programın başka bir yerinde bir özellik değiştirildi: bu, dış kodun "beklenmedik" bir şekilde tüm kullanıcılar için küresel ayarları değiştirmesi nedeniyle, veri işlemeyle ilgili zor tespit edilebilen hatalara yol açtı.
Hikaye
Projede aynı anda let, const ve var kullanıldı, net bir politika olmadan. Bir bileşen, bir fonksiyon çerçevesinde bir var değişkenini yeniden ilan etti, oysa başka bir yer, değişkenin let ile ilan edildiğini ve bu nedenle blok dışında görünmeyeceğini bekliyordu. Sonuç: değişkenlerin örtüşmesi, iç mantıkta hatalar ve değişkenlerin belirgin yaşam döngüsü ile ilgili karmaşık hata ayıklama sorunları.