Hallo,
img_5.onclick=function(){deleteRow(tableId,newRowNo,confirmDelete);}
Mir war einfach nicht klar, wieso die Funktionsparameter immer wieder überschrieben werden
Die Frage ist vielmehr, warum diese Variablen überhaupt in der onclick-Funktion verfügbar sind! Die Antwort ist, weil du Funktionen verschachtelst und verschachtelte Funktionen Zugriff auf die lokalen Variablen der äußeren Funktion haben - und zwar auch dann noch, wenn die äußere Funktion längst abgelaufen ist. Dieses Phänomen nennt sich Closures und du hast es hier schon verwendet, ohne es zu wissen.
Allerdings steckt die obige Anweisung wohl in einer Schleife. In der Schleife erzeugst du also viele Closure-Funktionen, die alle auf ein und dieselben Variablen "zeigen". In jeder dieser onclick-Funktionen sind die Variablen tableId, newRowNo und confirmDelete "eingeschlossen". Dabei werden keine Kopien angelegt, sondern viele Referenzen auf ein und dieselbe Speicherstelle angelegt.
Jetzt musst du dir vor Augen führen, wie das Programm abläuft: Die Funktion mit der Schleife läuft durch und weist die onclick-Handler zu. Dann wird sie beendet, aber die besagten Variablen sind konserviert, weil viele Funktionen sie "eingeschlossen" haben. Deren Werte nach dem Durchlauf der Schleife sind nunmal die des letzten Schleifendurchlaufs. Also haben alle onclick-Handler nicht Zugriff auf die Werte, die die Variablen in dem jeweiligen Schleifendurchlauf hatten, sondern auf die letztendlichen Werte vom Ende der Funktionsausführung.
Zwei Alternativen wurden hier schon genannt, das Speichern am Element und das bewusste Erzeugen einer Closure, die allerdings die aktuellen Variablenwerte selbst in lokalen Variablen speichert, damit diese bei dessen Ausführung verfügbar sind.
Siehe auch:
</archiv/2008/6/t173073/#m1135468>
</archiv/2006/9/t136283/#m885076>
</archiv/2006/12/t141557/#m919914>
http://www.howtocreate.co.uk/referencedvariables.html
Mathias