Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/75-98615f23

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

javascriptは参照渡し

Perlは深く、Rubyは浅いの続きでjavascript。

<script type="text/javascript">
hash1={
hoge:1,
piyo:2,
fuga:3
};

hash2=hash1;

hash2.hoge=10;

for(key in hash1){
alert('hash1 '+key+' : '+hash1[key]);
}

for(key in hash2){
alert('hash2 '+key+' : '+hash1[key]);
}
</script>

結果
『hash1 hoge : 10』
『hash1 piyo : 2』
『hash1 fuga : 3』
『hash2 hoge : 10』
『hash2 piyo : 2』
『hash2 fuga : 3』


一般にjavascriptは、オブジェクトは参照渡しで、それ以外は値渡しと説明される。

上記コードは、ハッシュのコピーがshallow copy(浅いコピー)される様を表しいる。
(javascriptではハッシュはオブジェクトで表現)
それでは、『非オブジェクトが参照渡しでなく値渡しされていますよね?』って検証プログラムを
書こうと思うのだが、javascriptにはRubyのような破壊的メソッドが無い。。。
強いて言えば、インクリメントの++が破壊的であるので、


<script type="text/javascript">
a=1;
b=a;
a++;
alert('a: '+a);
alert('b: '+b);
</script>

結果
『a: 2』
『b: 1』


a++の説明を、『aをインクリメントしたオブジェクトを生成し指し示している』
とした場合、『javascriptは全て参照渡し』と言っても問題ないのでは無いだろうか?

因みにJAVAではどうだろう?

public class Hoge {
public static void main (String[] args) {
int a = 1;
int b = a;
a++;
System.out.println(a);
System.out.println(b);
}
}

結果
2
1


・・・

やっぱ、ruby++がなくて、+=1と書かせるあたりが良いなぁ。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/75-98615f23

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。