オブジェクト型は参照渡し

  • 配列
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はほっとく...