2011-04-20 129 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