- Konu sahibi
- #1
JavaScript’te
Temel kullanım şöyledir:
Beklenen çıktı:
İlk satırda
Çıktı sırasıyla
Bir değişkenin hangi satırda ve hangi kapsamda tanımlandığını birlikte değerlendirin:
İç blokta aynı adın kullanılması, dış değişkenin değerini değiştirmez. Fakat gereksiz gölgeleme kodu okumayı zorlaştırabilir. Amacınız dış değişkeni güncellemekse başına yeniden let eklemeden atama yapın.
Bir döngüde her turda değişen sayaç için
Beklenen çıktı
Tanım öncesindeki temporal dead zone içinde typeof kullanımı da güvenli bir kaçış değildir; aynı kapsamda daha sonra bildirilen let değişkeni için ReferenceError oluşabilir. Bu durum, hiç bildirilmemiş bir adın typeof sonucunun undefined olmasından farklıdır.
Değişkeni tanımlanmadan önce kullanmak güvenli değildir:
Bu örnekte
Değişmeyecek değerler için sürekli
Evet.
Klasik bir tarayıcı script’inin üst düzeyindeki let, global lexical kapsamda bulunabilir; fakat
let, değeri sonradan değiştirilebilen bir değişken tanımlamak için kullanılan anahtar kelimedir. let ile tanımlanan değişken yalnızca oluşturulduğu blok içinde kullanılabilir. Bu nedenle modern JavaScript’te, değeri değişecek değişkenler için genellikle let, yeniden atanmayacak değişken bağları için ise const tercih edilir.Temel kullanım şöyledir:
JavaScript:
let sayac = 1;
sayac = 2;
console.log(sayac);
Beklenen çıktı:
JavaScript:
2
İlk satırda
sayac değişkeni oluşturulur ve 1 değeri atanır. İkinci satırda aynı değişkene 2 atanarak değeri değiştirilir. Başlangıç değeri yazılmadan let sonuc; tanımlandığında, bildirim satırı işlendiği andan sonra değeri undefined olur. Bu durum, bildirimden önceki temporal dead zone ile aynı değildir.let nasıl çalışır?
let blok kapsamlıdır. Bir blok, genellikle süslü parantezlerle ({}) oluşturulan kod alanıdır. if, for, while ve fonksiyon gövdeleri bu kapsamın sık görülen örnekleridir.
JavaScript:
let mesaj = "dış kapsam";
if (true) {
let mesaj = "if bloğu";
console.log(mesaj);
}
console.log(mesaj);
Çıktı sırasıyla
if bloğu ve dış kapsam olur. İçerideki mesaj, dışarıdaki değişkenin değerini değiştirmez; ayrı bir değişkendir. Bu davranış, büyük kodlarda değişken adlarının farklı bloklarda güvenli biçimde kullanılmasına yardımcı olur.let bildiriminin farklı durumları
Bir değişkenin hangi satırda ve hangi kapsamda tanımlandığını birlikte değerlendirin:
| Durum | let davranışı | Sonuç |
|---|---|---|
| Aynı değişkene yeni değer atama | İzinlidir | İlk tanımdan sonra tekrar let yazılmaz |
| Aynı kapsamda aynı adı bildirme | İzinli değildir | SyntaxError |
| İç blokta aynı adı bildirme | Dış değişkeni gölgeler | Dış değer kendiliğinden değişmez |
| Bildirimden önce okuma | Başlatılmamış lexical bağa erişilir | ReferenceError |
İç blokta aynı adın kullanılması, dış değişkenin değerini değiştirmez. Fakat gereksiz gölgeleme kodu okumayı zorlaştırabilir. Amacınız dış değişkeni güncellemekse başına yeniden let eklemeden atama yapın.
Uygulanabilir örnek: döngü sayacı
Bir döngüde her turda değişen sayaç için
let uygundur:
JavaScript:
for (let i = 0; i < 3; i++) {
console.log(i);
}
console.log(typeof i);
Beklenen çıktı
0, 1, 2 ve son olarak undefined olur. Bu bağımsız örnekte başka bir i bildirimi olmadığı varsayılır; döngüdeki i yalnızca for kapsamındadır. Döngüden sonra i değerini kullanmaya çalışırsanız doğrudan değişkene erişim, ReferenceError üretir.Sık yapılan hatalar
Tanım öncesindeki temporal dead zone içinde typeof kullanımı da güvenli bir kaçış değildir; aynı kapsamda daha sonra bildirilen let değişkeni için ReferenceError oluşabilir. Bu durum, hiç bildirilmemiş bir adın typeof sonucunun undefined olmasından farklıdır.
let ile tanımlanan değişkeni aynı kapsamda ikinci kez tanımlamak SyntaxError üretir:
JavaScript:
let ad = "Ali";
let ad = "Veli";
Değişkeni tanımlanmadan önce kullanmak güvenli değildir:
JavaScript:
console.log(sayi);
let sayi = 10;
Bu örnekte
ReferenceError: Cannot access 'sayi' before initialization hatası alınır. JavaScript bu dönemi temporal dead zone olarak ele alır. Çözüm, değişkeni kullanmadan önce tanımlamaktır.Değişmeyecek değerler için sürekli
let kullanmak kodun niyetini belirsizleştirir. Yeniden atama gerekmiyorsa const seçin.Sık sorulan sorular
let ile tanımlanan nesnenin içeriği değiştirilebilir mi?
Evet.
let ile tanımlanan değişkenin kendisine yeni bir nesne atayabilirsiniz; nesne içindeki özellikleri değiştirmek ise nesnenin sabit veya değişken olarak tanımlanmasından ayrı bir konudur. Yeniden atama gerekmeyen nesnelerde genellikle const kullanılır.let global değişken oluşturur mu?
Klasik bir tarayıcı script’inin üst düzeyindeki let, global lexical kapsamda bulunabilir; fakat
globalThis nesnesine otomatik olarak aynı adlı özellik eklemez. JavaScript modülünün üst düzeyindeki bildirim ise modül kapsamındadır. Bu nedenle global kapsamla nesne özelliğini birbirine eşit kabul etmeyin.