Essential ActionScript3.0 読書メモ 第39回 関数内でのアクセス定義・値としての関数

☆関数からのアクセス定義

プログラム内での関数の配置によって、プログラム中で定義されているもの(クラス、変数、メソッド名前空間、インターフェース、他の関数)へアクセスできるかどうかが決まる。

しかし、関数がどこで定義されていようと、関数クロージャーの中で、thisキーワードは常にグローバルオブジェクトを参照する。インスタンスメソッドの中でネストされた関数を用いて現在のオブジェクトにアクセスする際には、thisを変数に代入すればよい。

例:
public function m () {
    var currentObject = this;

    function f () {
        // ここでもcurrentObjectにはアクセスできる
        trace(currentObject);
    }
}

☆値としての関数

ActionScriptでは、全ての関数はFunctionクラスのインスタンスである。したがって、関数は、その他の値と同様、変数へ代入したり、関数の戻り値にしたりできる。

例:
function a () {
}
var b = a;
// var b = a(); ではない
ここでは、関数a()を定義した後で、a()を変数bに代入している。注意が必要なのは、括弧演算子が無いことである。もし括弧演算子が含まれていれば、bにa()を代入するのではなく、a()の戻り値を代入することになる。

関数を変数に代入した後は、括弧演算子を使って関数を呼び出すことができる。

例:
b(); // a()と同じ結果が返る

今日の進捗:206→207/1644