解决方案 »

  1.   

    因为a是object,b = a 后,b和a指向用同一个内存地址,所以你可以理解为 b 恒等于 a。所以改变该内存地址的值,a,b将同时改变
      

  2.   

    a 和 b指向了同一个对象  而不是a的副本
      

  3.   

    因为a 和b 只是一个对象的引用,修改a就等于修改了对象
      

  4.   

    你得理解对象是引用关系
    比如  : 
    var object1 = {name : "keatkeat"};
    这就表示你在内存中创建了一个对象,然后变量object1 指向了这个内存.(我们姑且叫它内存A) 
    var object2 = object1;
    这句表示变量object2指向了和object1同一个内存(也就内存A).
    object2.name = "xinyao";
    你通过object2这个变量找到了内存A并且把它的属性name的值给改变了。
    alert(object1.name);  //xinyao
    你通过object1这个变量找到了内存A , 因为刚才内存A已经被改动了,所以你拿到得自然就是xinyao,而不是 keatkeat了.
    总结就是 变量其实只是记入了内存的地址,2个变量都是读写同一个内存A 
    所以呢当你写 object1 = null ; 只是代表你切断了object1 与内存A的关系。
    这时object2 依然可以读写内存A .
    当所有的变量都切断和内存A的关系时,内存A就会被垃圾回收了!
      

  5.   

    而且好像数组也存在这个问题,前天写一个东西
    var a=b=new Array();
    结果后来a和b结果都一样。
      

  6.   

    因为js对象和数组都是引用,传递的是地址。参考如java的静态变量和C++的指针