オブジェクト型は参照渡し
- 配列
var a = ['foo', 'bar', 'baz']; var a1 = a; alert( a ); // foo, bar, baz hoge( a1 ); alert( a ); // bar, baz function hoge( a ) { a.shift(); }
- オブジェクト
var o = {'foo':'foofoo', 'bar':'barbar'}; var o1 = o; dd( o ); // foo => foofoo, bar => barbar moge( o1 ); dd( o ); // foo => foofoowww, bar => barbarwww function moge( arg ) { for( var p in arg ) { arg[p] += 'www'; } } function dd( o ) { var str = ''; for( var p in o ) { str += p + ' => ' + o[p] + ', '; } alert( str ); }
- clone
var a = ['foo', 'bar', 'baz']; var a1 = clone( a ); hoge( a1 ); alert( a ); // foo, bar, baz var o = {'foo':'foofoo', 'bar':'barbar'}; var o1 = clone( o1 ); moge( o1 ); dd( o ); // foo => foofoo, bar => barbar function clone( o ) { var ret = isArray( o ) ? [] : {}; for( var p in o ) { ret[p] = o[p]; } return ret; } function isArray( o ) { if ( o === null || typeof o != 'object' || typeof o.length == 'undefined' ) { return false; } return true; }
Functionはほっとく...