hi,
funtion x (y, z , e)
{
setTimeout("alert(z)", "2500");
}Das macht er einfach nicht und ich vermute er versteht nicht ganz, dass z eine Variable ist (wobei es sich um einen Sting handelt der übergeben wurde).
doch, dass z eine variable sein soll, merkt "er" da noch (schließlich hast du keinen string notiert) - aber er weiß nicht, wo diese definiert sein soll.
da z als parameter an die funktion x() übergeben wurde, steht z nur zur laufzeit dieser funktion zur verfügung. die funktion setzt den timeout, und ist danach mit ihrer arbeit fertig - y, z und e sind jetzt nicht mehr existent.
so, und jetzt kommt nach 2,5 sekunden so ein freches alert daher, und sagt zum javascript-interpreter, "ey alter, gib mir doch mal eben den wert der variablen z, damit ich den dem typen vor dem bildschirm anzeigen kann!"
darauf kann der interpreter natürlich nur mit einem schulterzucken (ggf. auch in form einer fehlermeldung) antworten, "hey kleines alert, ich habe keinen blassen schimmer, von was für einer variablen namens z du da eigentlich redest ..."
Gebe ich die Variable direkt aus:
alert(z);
funktioniert es.
natürlich, zu dem zeitpunkt ist die funktion x() noch nicht beendet, z existiert an dieser stelle noch - da kann der interpreter der anfrage des alert auch nachkommen, "hier hast du, kleines, der wert von z ist [...]".
Verändere ich die Zeile so:
setTimeout("alert('123')", "2500");
funktioniert dies auch.
natürlich, hier übergibst du ja ein fixes literal anstatt einer variablen.
gruß,
wahsaga
"Look, that's why there's rules, understand? So that you _think_ before you break 'em."