0

I want to remove the function creation in my code, but I don't know how? Can anyone here help me?

    for (var eventName in this.events) {
        var eventFunc = this.events[eventName],
            splitEventName = eventName.split(" "),
            eventType = splitEventName[0],
            eventUI = splitEventName[1];

        Utilities.addEventListener(this.ui[eventUI], eventType, (function(view, eventFunc) {
            return function(e) {
                eventFunc.call(view, e);
            };
        }(this, eventFunc)));
    }
TryingToImprove
  • 7,047
  • 4
  • 30
  • 39

1 Answers1

3

You could move your immediately-invoked function expression out of the loop and turn it into a normal function declaration. Then you can simply call it on each iteration:

function makeEventListener(view, eventFunc) {
    return function (e) {
        eventFunc.call(view, e);
    };
}
for (var eventName in this.events) {
    var eventFunc = this.events[eventName],
        splitEventName = eventName.split(" "), 
        eventType = splitEventName[0],
        eventUI = splitEventName[1];
    Utilities.addEventListener(this.ui[eventUI], eventType, makeEventListener(this, eventFunc));
}
James Allardice
  • 164,175
  • 21
  • 332
  • 312