Autor Zpráva
T0MÁŠ
Profil *
Dobrý den, jak zajistit aby se sem předala hodnota proměnné a ne její odkaz. Tento kód vypisuje 2 2, na místo 1 0, které bych potřeboval.

var arr = new Array('a','a');
for (var i = 0; i < arr.length; i++) {
setTimeout(function() {
alert('a' + i); // at vypisuje 0, 1
}, 1000);
}

V Javě bych si prostě udělal wrapper new Integer(i) a poslal ho do té funkce, takhle nevím

díky
ah01
Profil
var arr = new Array('a','a');

for (var i = 0; i < arr.length; i++) {
(function(){
var local = i;
setTimeout(function() {
alert('a' + local); // at vypisuje 0, 1
}, 100);
})();
}
T0MÁŠ
Profil *
Pěkně děkuji, to je přesně ono, funguje to. Co je ta prosím konstrukce

()()

nechápu to?
zero0x
Profil
toto je definicia funkcie:

function() {}

mozes ju ulozit do premennej..

fn = function(){}

..a potom zavolat:

fn()

alebo ju mozes zavolat priamo

function(){}()

ale to by zrejme nefungovalo, takze musis dat

(function (){})()

to znamena ze zavolas funkciu function(){}, ktora je akurat ohranicena zatvorkami
zero0x
Profil
btw nefungovalo ti to preto, lebo po sekunde bola hodnota i uz 2.
sakalik
Profil
je mozne ze by to slo s local aj bez function len ju treba deklarovat vo for cykle
ah01
Profil
sakalik
Ne, to v JS neni možné. Využívá se zde vlastnosti funkcí zvané closuer (pokud prahnete po detajlech: http://en.wikipedia.org/wiki/Closure_%28computer_science%29 )
Toto téma je uzamčeno. Odpověď nelze zaslat.

0