如下两段代码,绕晕了代码1:
var event,arr;
event = {a:1};
arr = {};
arr['test'] = event; 
event = {a:1,b:2} ;  //既然arr.test存储的是event变量,为什么不会跟着event变化呢?
console.log(arr.test);输出=> {a:1}------------------------------代码2:
var event,arr;
event = {a:1};
arr = {};
arr['test'] = event;
event.b = 2; //为什么增加属性的方式就可以改变arr.test的值?
console.log(arr.test);输出=> {a:1,b:2}

解决方案 »

  1.   

    var event,arr;
    event = {a:1};
    arr = {};
    arr['test'] = event; 
    event = {a:1,b:2} ;  //既然arr.test存储的是event变量,为什么不会跟着event变化呢?
    console.log(arr.test);因为arr.test实际指向的event指向的那个object,event只是一个中介
    重新定义event的时候,并没有影响arr.test实际指向的那个object
    var event,arr;
    event = {a:1};
    arr = {};
    arr['test'] = event;
    event.b = 2; //为什么增加属性的方式就可以改变arr.test的值?
    console.log(arr.test);同上,这时候修改了一开始指向的那个object,就影响了arr.test
      

  2.   

    它不是存储你那个变量,只是存储了那个变量的值
    比如一个简单的dom例子
    var test = document.getElementById('test').innerHTML
    然后你换掉test
    test = 123
    如果按照你说的是变量保存的话。那dom就会跟随的双向绑定一起变化了
    所以他们只是赋值而已
      

  3.   

    代码1:
    event = {a:1, b:2} ; // 这句话导致了event的引用变了,本来指向对象{a:1},现在指向对象{a:1, b:2}代码2:
    event.b = 2; // 这句话是不会改变event的引用的,本来指向对象{a:1},现在依然指向对象{a:1},并给对象{a:1}添加了个属性b