码迷,mamicode.com
首页 > Web开发 > 详细

JS的连等赋值

时间:2019-09-29 12:57:25      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:整理   title   lan   操作   声明   blank   undefined   targe   根据   

参考自,我再整理一遍。

  1. 题目如下:
    1. 1 var a = {n:1};  
      2 var b = a;   
      3 a.x = a = {n:2};  
      4 alert(a.x);
      5 alert(b.x);

      输出为  undefined, {n:2} .     

    2. 连等赋值时,对于 a.x = a = {n:2}; 

      1. 解析器先解析 a.x , 再解析a,得到他们的指针
        • 解析a.x的指针,因为此时a的指针指向的是 {n:1} , ‘x’属性并没有声明,先创建一个该属性,所以 {n:1}变为 {n:1, x:null}
      2. 再做赋值操作。
        1. 根据赋值的右结合性,上面的代码可以写为 a.x的引用 = (a的引用 = {n:2}) 
        2. 即先将值 {n:2} ,赋值给 a的引用 ,再赋值给 a.x的引用 ,但此时a已经指向 {n:2} , a.x 就是 ({n:2}).x ,但是 {n:2}并没有该属性
        3. 再将 {n:2} 赋值给 a.x的引用 ,即也是 b.x的引用 ,所以 {n:1, x:null}变为 {n:1, x: {n: 2}} 

JS的连等赋值

标签:整理   title   lan   操作   声明   blank   undefined   targe   根据   

原文地址:https://www.cnblogs.com/wydumn/p/11607051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!