Miért van az hogy ebben a példában a foo tömbben és azon függvényen belül a bar változó értéke a kiíratáskor miért nem mindig öt?
(function ()
{
var foo = [];
for (var i = 0; i < 5; ++i)
foo.push(function (bar)
{
return function ()
{return bar;}
}(i));
for (var j = foo.length - 1; j >= 0; --j)
print(foo[j]());
})();
A tippem az hogy a function (bar) függvény minden egyes alkalommal létrejön és a tömbbe mindig más változó kerül persze a függvényen belül és ugyanazon az az bar elnevezéssel.
Míg ebben a példában az i változó az ugyanaz csak az értéke változik és ezért fog az 5 mindig ki íratásra kerülni.
var foo = [], i, j;
for (i = 0; i < 5; i += 1) {
// Függvényeket pakolunk bele a foo tömbbe.
foo.push(function () { return i; });
}
for (j = foo.length - 1; j >= 0; j -= 1) {
// Kiírjuk a konzolra a függvény futásának eredményét.
print(foo[j]());
}
Nem tudom, honnan van ez a kód, de ráfér egy refaktorálás...
A meglátásod nagyjából jó, bár van benne némi képzavar :)
Egy kicsit a helyére bűvészkedve a kódban dolgokat, a kimenet 4, 3, 2, 1, 0 kell, hogy legyen, mert "bar" mindegyik a tömbben elhelyezkedő függvény számára lokális változó, míg a második példában "i" változót használva, minden "return i;" ugyanarra az egy darab változóra fog mutatni (a saját lokális scope -ján kívülre).
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!