Sobes.tech
Middle

Mi a különbség a var és a let segítségével deklarált változók használata között a zárványok kontextusában?

sobes.tech MI

Válasz az MI-től

A fő különbség abban rejlik, hogy milyen hatókört hoznak létre, és ennek eredményeként, hogyan befolyásolják a lezárás által elfogott változó értékét.

A var-ral deklarált változóknak funkcionális vagy globális hatókörük van. Például egy ciklusban, a lezárás a var utolsó értékét fogja elfogni a felhúzás (hoisting) miatt.

// Példa var-ral
for (var i = 0; i < 3; i++) {
  setTimeout(function() {
    console.log(i); // Háromszor 3-at ír ki
  }, 100);
}

A let-tel deklarált változóknak blokk szintű hatókörük van. Egy ciklusban, a let minden iterációhoz új változót hoz létre, és a lezárás az értékét az adott iterációra fogja elfogni.

// Példa let-vel
for (let j = 0; j < 3; j++) {
  setTimeout(function() {
    console.log(j); // 0, 1, 2
  }, 100);
}

A lezárás kontextusában ez azt jelenti, hogy a var-t elfogó lezárás ugyanarra a memóriahelyre fog hivatkozni, amely a változó utolsó értékét tartalmazza. A let-tel elfogó lezárás viszont minden iterációhoz külön memóriahelyre fog hivatkozni.