addCommand内でのfunctionについて雑感

Progressionでタイムラインスタイルを使っていて、のaddCommand内で、たとえばこう書いたときの話。
やってることは、p1というシーンを表示したときにp1ページ内のボタンの処理を追加しているんですが、問題はここでの「function()」の使い方。

var p1:SceneObject =new SceneObject()
p1.name ="p1"
p1.onInit =function():void{
this.addCommand(
new AddChild(prog.container.p1Page),
function(){
p1Page._page.btn.addEventListener(MouseEvent.MOUSE_DOWN,function(){
prog.goto(new SceneId("/index/p2"))
//本当はここでif使って、条件によって飛ばすシーンを変えてる
}
);
}
p1.onGoto =function():void{
this.addCommand(
p1Page._page.btn.removeEventListener(MouseEvent.MOUSE_DOWN,arguments.callee);
);
}

addCommand内のfunctionは、無名関数っつーか、関数リテラルとして実行される、と考えると納得できる。こういうのはその場で1回実行される(言い方はわからないけど、クロージャっていうの?)と理解してるんだけど。

javascriptでいう関数リテラルはこんな感じ。↓

(function(v)
{alert(v)}("aho")
);

これだと、jsはすぐに実行されて、画面にアラートが出ます。

今日の発見

  • addCommand内のfunctionは関数リテラル
  • 無名関数でaddEventListenerしたときは、arguments.calleeでremoveできる