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

js连等赋值

时间:2016-11-02 23:39:48      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:function   问题   存在   blog   undefined   重写   分享   class   efi   

 引用:http://www.iteye.com/topic/785445

    https://segmentfault.com/q/1010000002637728

 

这是一个问题

1  var a = {n:1}; //a指向了一块地址{n:1};
2  var b = a;  //持有a,以回查  //b对a的引用,也指向那块地址{n:1};
3  a.x = a = {n:2}; 
4  alert(a.x); // --> undefined 
5  alert(b.x); // --> {n:2}

 

 

js赋值是右结合的,从右边开始向左边赋值

1 A1 = A2 = A3 //等价于
3 A1 = (A2 = A3)
4 //所以全部都是A3的值

 

 上面的问题,在于:

 

 a.x=a={n:2};

错误猜想:a 先赋值为{n:2},a.x 发现 a 被重写后(之前a是{a:1}),a.x = {n:2} 引擎限制a.x赋值,忽略了。 (因为b.x 有输出)

之前状态:

技术分享

赋值后:

技术分享

也就是说 a.x 还是指向之前那块地址,后面a又指向了一块新地址{n:2},不再指向之前的地址。若没有b,则找不到a.x的值(但它存在,只是没有指针指向它)。

 a.x指向之前的地址是因为:  .运算符优先于=赋值运算

1、先声明a对象的x属性(a指向{n:1})

2、对a赋值,指向{n:2}

 3、再对a.x赋值(原来的a,也就是b)

 

 另外,少用连等符号,会出现全局变量

1 (function(){
2 var a=b=1;
3 }())
4 console.log(b); // 1    变成全局变量
5 console.log(a); //报错,因为不存在

 

js连等赋值

标签:function   问题   存在   blog   undefined   重写   分享   class   efi   

原文地址:http://www.cnblogs.com/ooooevan/p/6024770.html

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