Ticket #3655

関数に同じ配列変数を渡したときのバグ
Eröffnet am: 2004-01-01 04:53 Letztes Update: 2004-01-15 11:08

Auswertung:
Verantwortlicher:
(Keine)
Typ:
Status:
Offen
Komponente:
(Keine)
Meilenstein:
(Keine)
Priorität:
5 - Mittel
Schweregrad:
5 - Mittel
Lösung:
Keine
Datei:
Keine

Details

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

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

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

Ticket-Verlauf (2/2 Historien)

2004-01-15 11:01 Aktualisiert von: b2r
Kommentar
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 Aktualisiert von: b2r
Kommentar
Logged In: YES
user_id=4244

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

Dateianhangliste

Keine Anhänge

Bearbeiten

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