Kezdőoldal » Számítástechnika » Programozás » Miért van az hogy ebben a...

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?

Figyelt kérdés

(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]());

}


2013. febr. 9. 01:08
 1/1 anonim ***** válasza:

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).

2013. ápr. 29. 00:21
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!