2011-04-20 40 views
2

我是AS3的新手,无法弄清楚为什么这个循环没有按照“应该”的方式行事。AS3 - 关于符号绑定的问题

for each (var s in [_set, _set.otherSet]) { 
    for each (var f in [s.frame_top_mc, s.frame_bottom_mc]) { 
    f.addEventListener(MouseEvent.CLICK, function():void { 
     _score[f.category] += 1; 
     madeSelection(f); 
    }); 
    } 
} 

我怎么可以给每个匿名函数由f表示的每个对象,而不是一个简单的引用每次f参考?

具体而言,为什么每个匿名函数的副本都绑定到一个单引用f?在这方面,AS3与JavaScript有什么区别(我应该说为什么)?

回答

2

它必须是这样的:

for each (var s in [_set, _set.otherSet]) { 
    for each (var f in [s.frame_top_mc, s.frame_bottom_mc]) { 
    f.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void { 
     _score[e.currentTarget.category] += 1; 
     madeSelection(e.currentTarget); 
    }); 
    } 
} 

的问题是,你的封本身关闭在循环变量˚F,而不是每一件事情f为正在使用内循环引用。循环完成后,f留作参考列表中最后一件事情。 f在闭包创建时并未被取消引用,而是在执行时。

+0

我知道这可能是这样 - 不知道如何规避它。谢谢! – 2011-04-20 19:59:19