Flash CS3 ドキュメンテーション |
|||
| ActionScript 2.0 の学習 > 関数とメソッド > 関数とメソッドについて > メソッドと関数の種類について > 匿名関数とコールバック関数の記述 | |||
名前付き関数は、その定義前または定義後にスクリプト内で参照できる関数です。一方、"匿名関数" は名前のない関数で、作成時にそれ自体を参照します。ActionScript コードを記述するときは、多数の匿名関数を作成することになります。
匿名関数は、イベントハンドラを作成する場合によく使用されます。匿名関数を記述するには、変数内に関数リテラルを格納します。このことにより、それ以降のコードで関数を参照できます。次の例に、匿名関数の記述方法を示します。
var myWidth = function () {
trace(my_mc._width);
};
// コードの後の部分で追加可能
myWidth();
ムービークリップの幅が [出力] パネルに表示されます。
関数は、XML インスタンスや LoadVars インスタンスなどのオブジェクト内に作成することもできます。匿名関数を特定のイベントに関連付けると、"コールバック関数" を作成できます。コールバック関数は、ロードの完了 (onLoad()) 後またはアニメーションの完了 (onMotionFinished()) 後など、特定のイベントの発生後に関数から呼び出されます。
たとえば、サーバーから SWF ファイルにロードされるデータを処理する ActionScript を記述しなければならないことがあります。SWF ファイルへのデータのロードが終了すると、その場所からデータにアクセスできます。ActionScript を使用してデータが完全にロードされたかどうかをチェックすることが重要です。コールバック関数を使って、データがドキュメントにロードされたことを通知することもできます。
リモート XML ドキュメントをロードする次のコールバック関数では、匿名関数を onLoad() イベントに関連付けます。次の例に示すように、XML.load() とコールバック関数を使用します。タイムラインのフレーム 1 に次のコードを入力します。
var my_xml:XML = new XML();
my_xml.onLoad = function(success:Boolean):Void {
trace(success);
};
my_xml.load("http://www.helpexamples.com/crossdomain.xml");
前のコードから、onLoad() イベントハンドラは匿名関数を使用して onLoad() イベントを処理していることがわかります。
コールバック関数の詳細については、イベントの処理を参照してください。
次のコードのように、匿名関数を setInterval() 関数と共に使用することもできます。このコードでは、setInterval() を使用して約 1000 ミリ秒 (1 秒) ごとに匿名関数を呼び出します。
setInterval(function() {trace("interval");}, 1000);
匿名関数の代わりに、名前付き関数を使用することもできます。コールバック関数などの一部の状況を除き、多くの場合、名前付き関数は匿名関数に比べて解読や理解が容易です。また、名前付き関数は前方参照することもできます。つまり、関数がタイムライン上に現れる前に参照できます。
名前付き関数とは異なり、匿名関数は、変数に割り当てない限り、コードのどこからでも参照できるわけではありません。たとえば、次のように、FLA ファイルのフレーム 5 に匿名関数があるとします。
//タイムラインにわたる my_mc というムービークリップの場合
stop();
var myWidth = function () {
trace(my_mc._width);
};
次のコードをフレーム 1 に配置した場合は、関数を参照できません。
myWidth();
同様に、次のコードをどのフレームに配置しても、正常に動作しません。
myWidth();
var myWidth:Function = function () {
trace(my_mc._width);
};
ただし、次のコードは正常に動作します。
var myWidth:Function = function () {
trace(my_mc._width);
};
myWidth();
|
メモ |
|
また、 |
名前付き関数を定義する場合、フレームスクリプトでの名前付き関数の呼び出しは正常に動作しますが、匿名関数を使用した同様のコードは正常に動作しません。
// 次のコードは、名前付き関数を呼び出しているので、正常に動作する
myWidth();
function myWidth() {
trace("foo");
}
// 次のコードは、匿名関数を呼び出しているので、正常に動作しない
myWidth();
var myWidth:Function = function () {
trace("foo");
};
詳細については、名前付き関数の記述を参照してください。
|
メモ |
|
スクリプトアシストを使用してコードを記述する方法については、『Flash ユーザーガイド』を参照してください。 |
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000751.html