http://d.hatena.ne.jp/Nabetani/20050919/c1127170014 に答えて:
delete mLNext は、ずばり不要だと思っています。
不要ですが、パフォーマンスがよくなる可能性があると思って書きました(悪くなる可能性もあります)。
mLNext はそれなりにサイズが大きくなるので、ガーベッジコレクトを待たずに削除することでメモリが楽になるかも、という魂胆です。
とはいえ。測定してないので何とも言えませんし、delete しなくても関数から出た時点で削除されるような気もします。
それよりなにより。
宣言時の初期化の動作です。
昨日書いたとおり、宣言時に初期化コードを書くと値は共有されます。とはいえ、static 修飾子はついていないので、インスタンス変数になります。つまり、変数は共有されません。
言い換えると。右辺は一度しか実行されませんが、インスタンス変数の生成はコンストラクタを呼ぶたびに実行されます。
例えば、当たり前っぽいコードですが:
class Foo { var m:Number = Math.random(); function Foo( mc:MovieClip, depth:Number ) { m = Math.random(); // 略 } static function main() { var t0 = new Foo( _root, 1 ); var t1 = new Foo( _root, 2 ); } }
とすると、t0.m と t1.m の値は異なるようになります。
インスタンス変数宣言の右辺はクラス定義時に実行されるような気もしますが、実行結果は一体どこに格納されているのかがまったく謎です。
class Foo { var foo = function(){ _root.createTextField( "foo", 1, 0, 0, 200, 20 ); _root[ 'foo' ].text = 'foo'; return 1; }() static function main(){} }
を試すと、new Foo を実行しなくても、インスタンス変数宣言の右辺は実行されることがわかります。
return した 1 の行方は一体??