Hallo,
varinheritInstance = this;
p.onclick = function {
inheritInstance.select.apply( inheritInstance, [position] );
}
>
> Anscheint wird irgendwie die Variable ewig im Speicher gehalten und die anonyme Funktion hat nur eine Referenz auf diese Variable mit natürlich veränderten Wert.
[It's not a bug, it's a feature](http://de.wikipedia.org/wiki/Closure) - das, was Du beschreibst ist das Symptom von Closures: Eine lokale Variable (position) verbleibt trotz ihrer Lokalität (in der Schleife) beim Verlassen der Schleife auf dem Stack, da die anonyme Funktion nach wie vor eine Referenz darauf hält.
Da die Funktion ja nicht beim Laufen der Schleife ausgeführt wird, sondern erst beim onclick-Event, hat "position" den letzten Wert der Schleife, also 50.
Umgehen kannst Du das z.b. auch, in dem Du den Wert von aussen dem P-Element "zufütterst"
~~~javascript
varinheritInstance = this;
var handler = function {
inheritInstance.select.apply( inheritInstance, [this.position] );
}
handler.position = position;
p.onclick = handler;
(ohne Gewähr)
Damit wird die Variable "position" zu einer lokalen Eigenschaft des Funktionsobjektes "handler" (welcher mittels "this.position" darauf zugreifen können müsste)
Nun zur Frage: Was sollte ich bevorzugen setAttribute('onclick','...') oder element.onclick = function () {}; ?
Ich wäre für "element.onclick" aus den von Dir genannten Vorteilen.
Grüße,
Jörg