zoukankan      html  css  js  c++  java
  • js连等赋值与对象引用

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

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

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

    猜想:从右到左赋值,a 先赋值为{n:2},a.x 发现 a 被重写后(之前a是{a:1}),a.x = {n:2} 引擎限制a.x赋值,忽略了。步骤如下:

    1, a = {n:2};
    2, a.x 未被赋值{n:2}

    等价于 a.x = (a = {n:2}),即执行了第一步,这样也能解释a.x为undefined了。注意猜想2中a.x压根没被赋值过。

    事实是 ----- .运算符优先于=赋值运算

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

  • 相关阅读:
    一个简单的投票功能
    快速删除.svn文件夹
    屏蔽关键字
    批量过滤POST GET数据
    JS识别ios & 安卓
    HashMap
    GC
    类与类之间的关系
    玩转大数据之Apache Pig如何与Apache Lucene集成
    大话设计模式-简单工厂模式
  • 原文地址:https://www.cnblogs.com/tblj/p/7028363.html
Copyright © 2011-2022 走看看