Parameter ist weg nach setTimeout
homer
- javascript
Hallo
function konstant(x)
{
alert(x);
setTimeout('konstant(x)',10);
}
Wie kann ich hier den Parameter beibehalten???
Die Funktion wird über onload="konstant(1)" aufgerufen.
Wenn setTimeout die Funktion zum 2x aufruft, ist 'x' undefinded.
Hallo Homer
function konstant(x)
{
alert(x);
setTimeout('konstant(x)',10);
}
Wie kann ich hier den Parameter beibehalten???
Die Funktion wird über onload="konstant(1)" aufgerufen.
Wenn setTimeout die Funktion zum 2x aufruft, ist 'x' undefinded.
Das ist auch richtig so. Der Parameter lebt nur solange wie der Funktionsaufuf dauert. Die Methode setTimeout() erzeugt eine Verzögerung des Aufrufes und wird erst wirksam, wenn die Funktion bereits abgearbeitet ist. Wenn dann der Aufruf abgearbeitet wird, existiert x natürlich schon längst nicht mehr, daher die Fehlermeldung.
Abhilfe kannst du durch eine Stringaddition schaffen:
setTimeout('konstant('+x+')',10)
wenn in x 1 gespeichert ist entsteht daraus der Aufruf:
setTimeout('konstant(1)',10);
Aufpassen muß man, wenn x einen String enthält, hier müssen die Begrenzerzeichen mit angegeben werden, da diese nicht von allein gesetzt werden:
z.B. x="abc";
setTimeout('konstant("'+x+'")',10)
erzeugt
setTimeout('konstant("abc")',10);
Fehlen die Begrenzerzeichen erfolgt sonst eine Fehlermeldung.
Viele Grüße
Antje
Moin Antje!
Das ist auch richtig so. Der Parameter lebt nur solange wie der Funktionsaufuf dauert. Die Methode setTimeout() erzeugt eine Verzögerung des Aufrufes und wird erst wirksam, wenn die Funktion bereits abgearbeitet ist. Wenn dann der Aufruf abgearbeitet wird, existiert x natürlich schon längst nicht mehr, daher die Fehlermeldung.
Nicht nur das. Vor allem findet der von setTimeout getriggerte Aufruf im globalen Namespace statt. Also auch wenn die Funktion nach den 10ms noch laeuft, klappt das nicht, es sei denn, es gibt eine Variable window.x. Wenn es die aber gibt, ist es wiederum egal, ob die Funktion noch ausgefuehrt wird oder nicht mehr.
So long
Vielen Dank!
Das hat geklappt!