- ベストアンサー
【変数消去】できるのかな??
変数を宣言して値を入れて それを消す方法はありますか?? var a =1; この"a"という変数の入れ物じたいを スコープから消せますか?? nullを入れるとnullのままだし。 どうしたらいいか教えてください。
- みんなの回答 (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 では値を取り出せません。
お礼
詳しい解説ありがとうございます。 さきほど、 「ActionScriptビジュアルリファレンス」 という本を買って調べたら見つかりましたが そこまでの解説は載っていませんでしたから とても参考になりました。