• ベストアンサー

【変数消去】できるのかな??

変数を宣言して値を入れて それを消す方法はありますか?? var a =1; この"a"という変数の入れ物じたいを スコープから消せますか?? nullを入れるとnullのままだし。 どうしたらいいか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

delete というアクションで削除できます。 例えば、 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //変数aを作成  var a = 1;  trace( a );  //変数aを削除  delete a;  trace( a ); というようなスクリプトを書くと、2回目の trace アクションでは undefined (未定義)と表示されます。 ********************************** ただし、以下の場合は削除できません。  ・ function の中で var を付けて宣言したもの。    この変数はローカル変数といって、その関数の中だけで使える変数です。    関数が終了すると同時に、自動的に削除されます。  ・ムービークリップの _x など定義済みのプロパティや、Flash で予め用意されているオブジェクト。    デバッガで見た時、「プロパティ」のタブに表示されるものは削除できません。    ちなみに onEnterFrame や onRelease などは定義済みプロパティではないので、delete で削除できます。  ・ attachMovie 等で作成したムービークリップや、ステージに配置したオブジェクト。    スクリプトで作成したムービークリップは、delete ではなく removeMovieClip メソッドで削除します。  ・他の変数に参照がコピーされているもの。    参照とは、変数がある(メモリ上の)場所を示す情報のことです。    delete で変数自体はなくなりますが、この参照を持つ変数が他に存在している限り、値はなくなりません。 参照が保存されている場合の例はヘルプにサンプルがあります。 シンタックス4をご参考になさってください。  ・ Flash ドキュメンテーション: delete ステートメント   http://livedocs.adobe.com/flash/8_jp/main/00001865.html ↑ ref1 は delete により削除されて消えますが、ref2 に ref1 の参照がコピーされているため、値はそのままメモリ内に残ります。 ref2 には ref1 を使って値を保存した場所、つまり値があるメモリ上の場所が記録されていますから、ref2 を利用して ref1.name と同じ値を取り出すことが可能です。 しかし、ref1 は消えてしまっているので、ref1.name では値を取り出せません。

dizzdive
質問者

お礼

詳しい解説ありがとうございます。 さきほど、 「ActionScriptビジュアルリファレンス」 という本を買って調べたら見つかりましたが そこまでの解説は載っていませんでしたから とても参考になりました。

関連するQ&A