2012-11-22 2 views
0

코드에서 함수 생성을 제거하고 싶지만 어떻게 작동합니까? 아무도 나를 도울 수 있습니까?루프 클로저에서 함수 생성을 제거하십시오.

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))); 
    } 

답변

3

바로 호출 한 함수 표현식을 루프 밖으로 이동하여 일반 함수 선언으로 바꿀 수 있습니다. 그런 다음 반복 할 때마다 간단하게 호출 할 수 있습니다.

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)); 
} 
+0

감사합니다. 그것은 쉽다. :-) * 받아 들일 수 있기 전에 나는 9 회의 mintures를 기다려야한다. – TryingToImprove

+0

'for' 루프의 본문을 실행하려고 할 때'this.events.hasOwnProperty (eventName))'도 확인해야합니다. – nozzleman

+0

그래, 나도 알아,하지만 경우에만 (예 : "광고"), 그럼 그게 필요한가요? – TryingToImprove