closure: JS-Variable in onclick-Ereignis einfügen?

Beitrag lesen

ich würde jetzt eher sagen, dass Closures mein Problem erst verursacht haben und sehe nicht, wie ich es darüber lösen könnte? Hättest Du lust die Idee auszuführen? :)

indem du bei jedem schleifendurchlauf eine anonyme funktion erzeugst (per funktionsausdruck), diese direkt ausführst und dabei den schleifenzähler als parameter übergibst

darin eine weitere closure notierst (die event-handler-funkton), die den schleifenzähler einschließt

for (var i = 0; i < 5; i++) {
   (function (i) {
      ...
      element.onclick = function () {
         alert("Das korrekte i:" + i);
      };
   })(i);
}

die closure sorgt dafür, dass das variablenobjekt der jeweiligen äußeren (anonymen, nicht gespeicherten, nur einmal ausgeführten) funktion erhalten bleibt. das liegt in der scope chain über dem variablenobjekt der event-handler-funktion, dort wird dann die variable i gefunden

das ist aber ziemlich gefrickelt und nicht so performant (viele erzeugte funktionen und funktionsaufrufe, massig variablenobjekte, die im speicher verbleiben), es gibt einfachere und robustere methoden

weiteres findet sich im archiv zu den stichwörtern closures und schleifen