Incidencia #3655

関数に同じ配列変数を渡したときのバグ
Abrir Fecha: 2004-01-01 04:53 Última actualización: 2004-01-15 11:08

Informador:
Propietario:
(Ninguno)
Tipo:
Estado:
Open
Componente:
(Ninguno)
Hito:
(Ninguno)
Prioridad:
5 - Medium
Gravedad:
5 - Medium
Resolución:
Ninguno
Fichero:
Ninguno

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
Comentario
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
Comentario
Logged In: YES
user_id=4244

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

Attachment File List

No attachments

Editar

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