【发布时间】:2012-08-08 03:11:32
【问题描述】:
代码优先
import flash.display.Sprite;
import flash.events.Event;
public class TestClosure extends Sprite
{
private var a:Object = {'value':'test'}
public function TestClosure()
{
this.addEventListener(Event.ADDED_TO_STAGE,
function (e:Event):void
{
trace(a.value);//this works
// trace(this.a.value);this won't work
}
);
}
}
如您所见,访问实例属性 a 没有“this”关键字会成功。
所以这是我的猜测,我不知道它是否正确。
当创建闭包函数时,编译器会寻找范围变量并创建对它的引用。
使用 a.value 会导致编译器在函数范围内寻找 a,当然 var a 是一个私有变量,它在函数范围内可用。
使用this.a.value,编译器会跳过“this”,因为它在很多情况下是动态的,只能在运行时确定。就像闭包函数“this”引用全局而不是实例一样。
感谢您的任何提示。
【问题讨论】:
标签: actionscript-3 function actionscript closures