(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)
関数のネスティング(入れ子で定義する)も可能です。次の例はgetUser関数の中にgetID関数とgetName関数が定義されています
[:script:]関数の中に関数を入れ子で定義する
note
関数クロージャではthisを正しく理解して使う必要があります。
関数のネスティング(入れ子で定義する)も可能です。次の例はgetUser関数の中にgetID関数とgetName関数が定義されています
[:script:]関数の中に関数を入れ子で定義する
function getUser():Array { var domain:String = "jq1"; function getID():String { return domain+"abc"; } function getName():String { return "大重美幸"; } return ([getID(),getName()]); } //テスト trace(getUser());//出力:jq1abc,大重美幸関数をネスティングする利点には、親関数getUser()のローカル変数の値をネストされた子関数getID()が利用できることがあります。このような形態を関数クロージャ(function closure)あるは関数閉包と呼びます。関数クロージャが他の関数に引数として渡されたり、ほかの関数から呼び出された場合にも内部のローカル変数の値は保持されます。
note
関数クロージャではthisを正しく理解して使う必要があります。
var a:int=1; trace(this, this.a, a);//出力:[object MainTimeline] 1 1 function test():void { var a:int=2; trace(this, this.a, a);//出力:[object MainTimeline] 1 2 closetest(); function closetest():void { trace(this, this.a, a);//出力:[object global] undefined 2 } } //テスト test();