Ticket #3655

関数に同じ配列変数を渡したときのバグ
Open Date: 2004-01-01 04:53 Last Update: 2004-01-15 11:08

Reporter:
Owner:
(None)
Type:
Status:
Open
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

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

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

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

Ticket History (2/2 Histories)

2004-01-15 11:01 Updated by: b2r
Comment
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 Updated by: b2r
Comment
Logged In: YES
user_id=4244

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

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login