メソッド、メソッドクロージャ、関数クロージャ

前の記事、ミスったああああ。
メソッドクロージャじゃなくて、関数クロージャだった!
修正しといた。


メソッドとメソッドクロージャと関数クロージャって紛らわしいよね!
ということでまとめ。

メソッドとは?

いつも使ってるやつ。
インスタンス関数とかstatic関数とかがそれに当たる。

public function foo():void {}

とか。

関数クロージャとは?

クラスに属していない関数のこと。
無名関数で作られたり、関数の中で宣言したやつがこれにあたる。
様は動的に作られる関数。

public function foo():void
{
	var f:Function = function():void { trace("f()");}
	
	function g():void
	{
		trace("g()");
	}
	f();
	g();
}

上の例では、fに束縛(代入)された関数や、gが関数クロージャにあたる。
当然、fとかgとかはfoo()の外からはアクセスできない。
ちなみにtrace()や、getTimer()も、クラスに属していないので、これも関数クロージャである。
(TODO:あとで補足書く)

メソッドクロージャとは?

メソッドをFunctionオブジェクトとして扱う場合、それをメソッドクロージャっていう。

public function Main():void{
	addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
	trace("enter framce");
}

addEventListener()の引数に入れているonEnterFrameがそれにあたる。


というのが
AS3のクロージャ | www.imajuk.swf
に書いてあったよ!