js引用类型指针

132 阅读1分钟
  var a={n:1};
  var b=a;
  a.x=a={m:2};
  console.log(a.x;b.x);
  
  ----undefind  {m:2}----
  
 第一步
     var a={n:1};
     var b=a;
     得到 
     a={n:1};
     b={n:1};

 第二步
     根据优先级.的优先级大于=,
     通过a.x得到,
     a={n:1;x:undefind};
     b={n:1;x:undefind};
 
 第三步
     通过a={m:2}得到
     a={m:2};
     b={n:1;x:undefind};
     
 第四步
     因为a.x=a={m:2}在同一公式中;
     先执行的a.x,所以a.x即b.x;然后a的指针才改变为{m:2},即a.x=a为b.x=a;
     因为a的指针改变,a.x=undefined;
     而在a的指针改变之前,a.x优先级高,先执行,即b.x赋值为{m:1};
     
 最后得值
 a.x=undefined;
 b.x={m:1}
 
    如果这样写就是另一种结果
     var a={n:1};
     var b=a;
     a={m:2};
     a.x=a;
     console.log(a.x;b.x);
  
  ----{m:2;x:{m:2}}  undefined----