molily: Variablenübergabe

Beitrag lesen

Hallo,

Eine Variante die klappen sollte, schaut so aus:

insertimg.onclick = (function(j){
return function(){navi(j);}
})(j)

  
Wenn man eine schnelle Lösung sucht, ist das in Ordnung, in gutem Code sollte man dieses Muster möglichst vermeiden (siehe [Performance von JavaScript-Closures](http://molily.de/weblog/closures-performance)). Es gibt fast immer besser skalierende Lösungen, als n Funktionsobjekte in Schleifen anzulegen.  
  
Obigen Code sollte man zumindest so optimieren, dass nicht in jedem Schleifendurchlauf zwei neue Funktionen erzeugt wird, wovon die erste sofort wieder weggeworfen wird (gut, das optimieren manche Engines wahrscheinlich weg):  
  
~~~javascript
function getHandler (j) {  
  return function () {  
    navi(j);  
  };  
}  
insertimg.onclick = getHandler(j);

Besser sind natürlich dedizierte, optimierte Funktionen für Binding und Currying (wie Function.prototype.bind), siehe dazu auch obigen Artikel.
Auf Closures zu verzichten, etwa mit Event-Delegation, ist meistens die vorteilhafteste Lösung.

Mathias