関数のネスティング(function closure)

|
(section01-03 フレームアクションのメソッド定義と関数定義から抜粋)

 関数のネスティング(入れ子で定義する)も可能です。次の例は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();
まったく新しいAS3の世界!
694a.jpg
Adobe Flash CS4
詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付)

楽しいActionScript。
新たなる1歩へと踏み出しましょう。
■内容は?→ 目次を見る
■評判は?→ 書評を読む
この本を書いたわけ

このブログ記事について

このページは、oshigeが2009年8月25日 16:15に書いたブログ記事です。

ひとつ前のブログ記事は「Functionインスタンス」です。

次のブログ記事は「配列演算子[]を使う」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ