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

时间:2010-12-25 13:44:06

标签: actionscript-3 anonymous-function

我想在循环中设置按钮,并向它们添加一些事件,但匿名函数是相同的。我写了示例代码:

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 .. 你知道我怎么能做到这一点?

1 个答案:

答案 0 :(得分: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));