コードファースト
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
}
);
}
}
ご覧のとおり、"this" キーワードなしでインスタンス プロパティ a にアクセスすると成功します。
というわけで、これが正しいかどうかはわかりませんが、私の推測です。
クロージャ関数を作成するとき、コンパイラはスコープ変数を探し、それへの参照を作成します。
a.value を使用すると、コンパイラは関数スコープで a を探します。もちろん、var a は関数スコープで使用できるプライベート変数です。
this.a.value を使用すると、多くの状況で動的であり、実行時にのみ決定できるため、コンパイラは「this」をスキップします。クロージャー関数のように、「this」はインスタンスではなくグローバルを参照します。
ヒントをありがとう。