function function_move(mover,zielx,ziely){
window.setTimeout ('function_move(mover,zielx,ziely)', 31.25);
Der Code, den man setTimeout übergibt, wird im globalen Kontext ausgeführt.
mover, zielx und ziely sind hier jedoch lokale Funktionsvariablen. Sie werden auf diese Weise nicht »gerettet« und übergeben, sondern gehen verloren. Als Abhilfe kann man:
- Eine Closure-Funktion erzeugen, die die lokalen Variablen einschließt und konserviert und sie bei der Ausführung wieder an function_move übergibt. Da wir diese Closure nicht unter einem Namen speichern müssen, notieren wir sie als namenlosen Funktionsausdruck:
window.setTimeout(function () {
function_move(mover, zielx, ziely);
}, 31)
- setTimeout nimmt einen dritten, vierten bis n-ten Parameter entgegen, in denen der Funktion Parameter übergeben werden können. Als ersten Parameter übergibt man das Funktionsobjekt (nicht als String):
window.setTimeout(function_move, 31, mover, zielx, ziely);
Diese Aufrufweise wird allerdings nicht vom Internet Explorer unterstützt.
Es gäbe noch viele weitere Möglichkeiten, die Variablen der Funktion zur Verfügung zu stellen, z.B. ein eigenes Objekt, bei dem move eine Methode ist.
Mathias