2010-12-25 3 views
10

단추의 루프 집합을 만들고 이벤트를 추가하려고하지만 익명 함수가 동일합니다. 당신이 이걸 어떻게 할 수 아십니까 ..동일한 인수가 아닌 루프에서 익명 함수 만들기

for(var i:int=0;i<5;i++) 
{ 
    var button:SimpleButton = new SimpleButton(...); 
    ... 
    button.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void 
    { 
     trace(i); 
    }); 
} 

... 

그리고 내가 대신 4,4,4,4의 클릭 버튼에서 0, 1, 2, 3 ...을 추적 할 : 나는 예제 코드를 작성?

+0

또한보십시오 http://stackoverflow.com/questions/422784/how-to-fix-closure-problem-in-actionscript-3-as3 –

답변

19

문제는 ActionScript가 클로저를 지원하지 않는다는 것입니다.

즉, 변수 i은 함수 당 자체 컨텍스트에 복사되지 않습니다. 모든 함수는 i의 동일한 인스턴스를 참조합니다.

여기

더 많은 정보 : , 당신은 함수를 생성하는 기능이 필요한이 작업을 수행하기 위해 http://flex.sys-con.com/node/309329

: 당신은 자신의 컨텍스트와 함수의 새로운 인스턴스를 생성 이제

public function makeFunction(i:int):Function { 
    return function(event:MouseEvent):void { trace(i); } 
} 

를 :

button.addEventListener(MouseEvent.CLICK, makeFunction(i));