2012-07-09 2 views
0

다음 코드는 루프의 마지막 위젯 만 모두 수신기 기능에 추가합니다. 모든 함수는 마지막 객체에서 toggleShow()를 호출합니다.각 루프에 대해 익명 함수의 변수 바인딩

왜 이런 일이 발생하며 해당 기능에서 각 위젯 객체를 참조 할 수있는 방법이 있습니까?

for each (var w:Widget in workspace.getWidgetList()) { 
    addMenuItem(w); 
} 

function addMenuItem(w:Widget):void 
{ 
    var widgetShow:NativeMenuItem = menu.addItem(new NativeMenuItem("Show " + w.title)); 
    widgetShow.addEventListener(Event.SELECT, function():void { 
     w.toggleShow(); 
    }); 
} 

답변

1

는 루프가 끝까지 실행하고 w는 익명 함수는 항상 마지막 요소를 사용라고 그래서 때 목록의 마지막 요소가되기 때문에 이런 일이 발생, 그 기능 확인 고마워, 그거야. 나는 아직도 그것을 완전히 이해하지 못한다. 또한 무명 함수를 정의하고 루프 앞에 변수에 할당했습니다.
+0

:

for each (var w:Widget in workspace.getWidgetList()) { var widgetShow:NativeMenuItem = menu.addItem(new NativeMenuItem("Show " + w.title)); widgetShow.addEventListener(Event.SELECT, function():void { w.toggleShow(); }); } 
Danik

관련 문제