ActionScript3のthisが関数単位のスコープだよ
AS3でプログラムを書いている人、ほぼ全員が混乱しているthisのスコープの話。
あれば実は、クラスごとにthisが決まるわけじゃなくて、呼び出されるたびに決っているんだ。
thisは関数の隠し引数
AS3で全ての関数は隠し引数として、thisを受け取っている。
function f(x : Int, y : Int){ ... }
だから、こんな2つの引数を受けとる関数は、実際は3つの引数を受け取っている。
function f([this : Object,] x : Int , y : Int){ ... }
引数だから実際のthisがどんな値になるかは、定義されている場所ではなくて、呼び出し方によって決まる。
自動でスコープチェーンに追加される
さらに、一部の関数では受けとったthisをスコープのトップに追加している。
だから
function f(){ return x; }
と書くだけでthis.xにアクセスできたりする。
詳しくは調べていないけど、基本的に内部関数以外はthisをスコープに追加している気がする。
要するに
thisが書いている場所で、レキシカルに決まると思っていると混乱しちゃうよ。