AS3 - 关于符号绑定的问题

时间:2011-04-20 19:24:02

标签: actionscript-3 binding scope anonymous-function

我是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有什么不同?

1 个答案:

答案 0 :(得分: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 不会被取消引用,但是当它被执行时。