Hallo,
eine Prozedur zum Verschieben eines Bildes ruft sich so oft selbst auf, bis das Bild am neuen Platz ist:
var lauf = 0;
function Move(name,xvon,xbis) {
Die Funktionsparameter-Objekte sind nur in der Funktion selbst vorhanden. Nach Ablauf der jeweiligen Funktionausführung verfallen sie. Bei setTimeout ist das der Fall. Der Code, den man setTimeout übergibt, wird im globalen Kontext ausgeführt. Da existieren die Variablen name, xvon und xbis jedoch nicht.
Mit Zwischenvariablen klappt es, ist aber doch wohl unnötig?
nm = name;
xv = xvon;
xb = xbis;
window.setTimeout("Move(nm,xv,xb)",5);
Logisch, weil jede Variable, die du in einer Funktion erstellst, im globalen Geltungsbereich gespeichert wird, nicht in dem der Funktion (Deklarationen mit »var« machen das Umgekehrte). Wenn dann der Code ausgeführt wird, den du setTimeout übergeben hast, kann auf die Variablen zugegriffen werden.
Wie sind die Parameter zu definieren?
Wie Christian sagte. Alternativ kannst du die Variablen im globalen Geltungsbereich, also außerhalb der Funktion, deklarieren, genauso wie du es mit der Variable lauf machst. Du musst nur darauf achten, dass nicht zwei Move-»Schleifen« gleichzeitig laufen.
var lauf = 0, name, xvon, xbis;
Eine Alternativschreibweise von setTimeout (JavaScript 1.2) ist übrigens setTimeout(Move, 5, nm, xv, xb);, da brauchst du dir um Gültigkeitsbereiche keine Gedanken machen und auch nicht um die korrekte Einbettung der Variableninhalte in einen String.
Mathias