molily: JSLint: Consider Closures

Beitrag lesen

Hallo,

Was Crockfords Tipp bedeutet, verstehe ich auch nicht ganz. Deine Funktionen sind bereits Closures. Closures in Schleifen werden oft missverstanden, aber du nutzt gar nicht den möglichen Zugriff auf die eingeschlossenen Variablen.

Deine Lösung ist nicht schlecht, höchstens unperformant und kann verbessert werden. Du legst in der Schleife immer wieder neue, aber gleiche Funktionsobjekte an, die den Speicher vollballern. Alle schließen den Scope von »initColPanelUl« ein und der Funktion, in der diese steckt (deiner Beschreibung nach vermutlich eine Konstruktorfunktion). Das sorgt auch dafür, dass der Speicher schwer vom Garbage-Collector aufgeräumt werden kann.

Das ließe sich zumindest so verbessern:

var handler = function (ev) {  
   interactFilterPanelEv(this.id, ev.type);  
};  
for (...)  
{  
   event.on(li.id, "mousemove", handler);  
   event.on(li.id, "mouseout", handler);  
   event.on(li.id, "mousedown", handler);  
   event.on(li.id, "mouseup", handler);  
}

Handler einmal außerhalb der Schleife anlegen und für alle Event-Typen anpassen. Der fragt dann einfach den Event-Typ über Eventobjekt.type ab.

Mathias