Junior
Bir fonksiyon içinde var kullanılarak değişken bildiriminin hangi sonuçlara yol açabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bir fonksiyon içinde var ile tanımlanan değişken, fonksiyonel kapsam alanına sahiptir. Bu, böyle bir değişkenin blok kapsamını (örneğin, if veya for içinde) görmezden gelerek tüm fonksiyon boyunca erişilebilir olduğu anlamına gelir.
Sonuçlar:
- Değişkenlerin üzerine yazılması: Bir blok içinde
varile tanımlanan değişken, aynı fonksiyon içinde daha önce tanımlanmış aynı isimdeki bir değişkeni üzerine yazabilir, ancak bu blok dışında kalır. - Hoisting (Yukarı kaldırma):
varile tanımlanan değişkenin bildirimi fonksiyonun başına kaldırılır. Bu, değişkenin bildiriminden önce kullanılabileceği anlamına gelir, ancak kullanım anındaki değeriundefinedolur. - Döngülerde beklenmeyen davranış: Asenkron işlemler (örneğin,
setTimeout) içerenfordöngülerinde,varile tanımlanan değişken, tüm asenkron geri çağırmalar için döngünün son değerini alır, yani iterasyon anındaki değil.
Yukarı kaldırma ve üzerine yazma örneği:
function ornekVarKapsami() {
console.log(a); // undefined (hoisting nedeniyle)
var a = 10;
if (true) {
var a = 20; // Dış değişken 'a'yı üzerine yazar
console.log(a); // 20
}
console.log(a); // 20 (if bloğundan gelen değer)
}
ornekVarKapsami();
Asenkron işlemler ve döngü örneği:
function ornekVarDongusu() {
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // 3, 3, 3 yazdırır (i, döngünün son değeri)
}, 100);
}
}
ornekVarDongusu();
Bu özellikler nedeniyle, beklenmedik durumları önlemek için, blok kapsamına sahip olan let veya const kullanılması önerilir.