Sobes.tech
Junior

Funktsiya daxilində var istifadə edərək dəyişən elan etməyin hansı nəticələrə səbəb ola bilər?

sobes.tech Süni İntellekt

AI-dan cavab

Bir funksiyada var ilə elan olunan dəyişən funksional sahəyə malikdir. Bu, belə bir dəyişənin bütün funksiya daxilində mövcud olduğu və blok sahələrinin (məsələn, if və ya for daxilində) nəzərə alınmadığı anlamına gəlir.

Nəticələr:

  • Dəyişənlərin üst-üstə yazılması: Bir blok daxilində var ilə elan olunan dəyişən, eyni funksiyada əvvəlcədən elan olunmuş və həmin blok xaricində olan eyni adlı dəyişəni üst-üstə yaza bilər.
  • Hoisting (yuxarı qaldırma): var ilə elan olunan dəyişənin bəyanatı funksiyanın əvvəlinə qaldırılır. Bu, dəyişəni bəyan etmədən əvvəl istifadə edə biləcəyiniz və həmin vaxt onun dəyərinin undefined olacağı anlamına gəlir.
  • Döngələrdə gözlənilməz davranış: for döngülərində, asinxron əməliyyatlar (məsələn, setTimeout) ilə, var ilə elan olunan dəyişən, bütün asinxron callbacklar üçün döngünün son dəyərini alır, iterasiya anındakı dəyər deyil.

Hoisting və üst-üstə yazma nümunəsi:

function nümunəVarSahəsi() {
  console.log(a); // undefined (hoisting səbəbindən)
  var a = 10;
  if (true) {
    var a = 20; // Xarici dəyişəni üst-üstə yazır
    console.log(a); // 20
  }
  console.log(a); // 20 (if blokundan alınan dəyər)
}

nümunəVarSahəsi();

Asinxron əməliyyatlar və döngü nümunəsi:

function nümunəDöngüVar() {
  for (var i = 0; i < 3; i++) {
    setTimeout(function() {
      console.log(i); // 3, 3, 3 çıxarır (i, döngünün son dəyəri)
    }, 100);
  }
}

nümunəDöngüVar();

Bu xüsusiyyətlər səbəbindən, gözlənilməz vəziyyətlərin qarşısını almaq üçün, blok sahəsinə malik olan let və ya const istifadə etmək tövsiyə olunur.