メソッド、メソッドクロージャ、関数クロージャ
前の記事、ミスったああああ。
メソッドクロージャじゃなくて、関数クロージャだった!
修正しといた。
メソッドとメソッドクロージャと関数クロージャって紛らわしいよね!
ということでまとめ。
関数クロージャとは?
クラスに属していない関数のこと。
無名関数で作られたり、関数の中で宣言したやつがこれにあたる。
様は動的に作られる関数。
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
に書いてあったよ!