Hallo,
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.
Mit »nach der Laufzeit sind die Variablen weg« hat das Phänomen nichts zu tun. Selbst während die Funktion noch läuft, kann durch setTimeout ausgeführter Code nicht auf dessen Parameter zugreifen. Der Parameter liegt einfach im Scope der Funktion, der Code, der nach dem Timeout ausgeführt wird, wird im globalen Scope ausgeführt. Aus dem globalen Scope ist kein Zugriff auf die Parameter der Funktion möglich, sofern dessen Werte nicht wie etwa wie in https://forum.selfhtml.org/?t=100670&m=617143 in den globalen Scope überführt werden.
Kleiner Test (Firefox und Konqueror):
var f_anfang, timeout, f_ende;
function stat (pstatus) {
timeout = ((new Date()).getTime() - f_anfang) + "ms nach Start der Funktion\nVariable p war: " + pstatus;
}
function f (p) {
window.setTimeout("stat(typeof p)", 0);
f_anfang = new Date();
alert("warte");
f_ende = new Date();
}
f("foo");
alert('Timeout feuerte: ' + timeout + ' \nEnde der Funktion ' + (f_ende - f_anfang) + 'ms nach dem Start beendet');
Mathias