在每个循环的一个匿名函数中绑定变量

时间:2012-07-09 13:52:32

标签: actionscript-3

以下代码将仅将循环中的最后一个Widget添加到 all 侦听器函数中。所有函数都将在最后一个对象上调用toggleShow()。

为什么会发生这种情况,是否有办法让每个Widget对象在相应的函数中被引用?

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

1 个答案:

答案 0 :(得分:1)

使它成为一个函数,这是因为循环运行到结尾并且w成为该列表中的最后一个元素,所以当调用匿名函数时它总是使用最后一个元素:

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