チケット #3655

関数に同じ配列変数を渡したときのバグ
登録: 2004-01-01 04:53 最終更新: 2004-01-15 11:08

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
オープン
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

function abc(b,c){
 b.delete(0);
 alert(c.join('/'));
}

a=["d","e","f"];
abc(a,a);

//実行すると、e/fと表示されます。

チケットの履歴 (2 件中 2 件表示)

2004-01-15 11:01 更新者: b2r
コメント
Logged In: YES
user_id=4244

これはバグではありません。(^^;

引数として渡されるのは、配列(オブジェクト)への参照です。
配列の内容がコピーされるわけではありません。
詳しくは"参照渡し"と"値渡し"あたりでぐぐってください。
他のオブジェクト指向言語でも、たいていDMonkeyと同様の結果になり
ます。

ちなみに単なる代入も参照です。
次のコードも関数の引数として渡した時と同様の結果になります。
a = ["d", "e", "f"];
b = a;
b.delete(0);
alert(a.join("/"));
alert(b.join("/"));

値コピーしたい場合は、
a = ["d", "e", "f"];
b = a.slice(0);
b.delete(0);
alert(a.join("/"));
alert(b.join("/"));
とでもすれば、aとbが個別にデータを持ちます。
2004-01-15 11:08 更新者: b2r
コメント
Logged In: YES
user_id=4244

文字化けしてますね・・・ (--)
すいません。

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする