(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();




![ActionScript 3.0辞典 [FlashPlayer10/9対応]](http://ecx.images-amazon.com/images/I/51ry2e8HtIL._SL75_.jpg)



