使用不同的参数在循环中创建匿名函数

oni*_*io9 10 anonymous-function actionscript-3

我想制作循环按钮组,并向它们添加一些事件,但匿名函数是相同的.我写了示例代码:

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

...
Run Code Online (Sandbox Code Playgroud)

我想从点击按钮而不是4,4,4,4跟踪0,1,2,3 ..你知道我怎么能做到这一点?

Bri*_*sio 19

您遇到的问题是ActionScript不支持闭包.

换句话说,变量i不会被复制到每个函数的自己的上下文中.所有函数都引用相同的实例i.

更多信息请访问:http: //flex.sys-con.com/node/309329

为此,您需要一个生成函数的函数:

public function makeFunction(i:int):Function {
    return function(event:MouseEvent):void { trace(i); }
}
Run Code Online (Sandbox Code Playgroud)

现在,您使用自己的上下文创建函数的新实例:

button.addEventListener(MouseEvent.CLICK, makeFunction(i));
Run Code Online (Sandbox Code Playgroud)