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