Actionscript中内联闭包/函数委托的使用

Actionscript中内联闭包/函数委托的使用,actionscript,inline-method,Actionscript,Inline Method,为什么在Actionscript中很少使用内联闭包?它们非常强大,我认为可读性很强。我几乎没见过有人使用它们,所以我可能只是看错了代码。谷歌在他们的谷歌地图API中使用它们来制作Flash示例,但我认为这是我唯一见过它们的地方 我喜欢它们,因为您可以访问定义它们的范围内的局部变量,并且可以将逻辑保存在一个方法中,而不必为许多函数命名 使用它们有什么好处吗?它们的工作方式是否与C#中的工作方式几乎相同 事实上,我只是刚刚发现AS3支持它们,我很恼火,因为我以为我在AS中读到它们被弃用了。所以我又开

为什么在Actionscript中很少使用内联闭包?它们非常强大,我认为可读性很强。我几乎没见过有人使用它们,所以我可能只是看错了代码。谷歌在他们的谷歌地图API中使用它们来制作Flash示例,但我认为这是我唯一见过它们的地方

我喜欢它们,因为您可以访问定义它们的范围内的局部变量,并且可以将逻辑保存在一个方法中,而不必为许多函数命名

使用它们有什么好处吗?它们的工作方式是否与C#中的工作方式几乎相同

事实上,我只是刚刚发现AS3支持它们,我很恼火,因为我以为我在AS中读到它们被弃用了。所以我又开始使用它们了

private function showPanel(index:int):void {    

_timer = new Timer(1000, 1);        
_timer.addEventListener(TimerEvent.TIMER, function(event:Event):void 
{
    //  show the next panel
    showPanel(index++);
});

需要注意的最大问题是,内联闭包中通常没有定义“this”。有时你可以设置一个“this”,但你并不总是可以设置正确的“this”,这取决于你如何使用它们

但我要说的是,我所研究的大多数Flex代码在整个代码中都有大量的内联闭包——因为回调是完成工作的唯一方法,而且通常不需要生成一个完整的单独函数

有时,当嵌套的函数变得太多时,我会在函数中使用函数变量稍微打破它;这有助于我通过给函数添加标签来组织一些内容,但保留了内联闭包的一些特征(例如,访问局部变量)


希望这能有所帮助。

我发现了最初让我不想这么做的原因,但我忘记了细节:

(这就是Mitch提到的——因为“This”关键字超出了范围)

这就是Adobe的答案,但我更可能需要引用局部变量而不是“this”


其他人如何解释Adobe的建议?

另外一个问题是,当涉及到闭包时,垃圾收集会被破坏(至少在Flash 9中是这样)。给定闭包的第一个实例(从词法的角度来看)将永远不会被垃圾收集——以及范围链中闭包引用的任何其他实例