zoukankan      html  css  js  c++  java
  • JavaScript连等赋值

    最近探究js原理的过程中遇到了这个挺有趣的问题。

    先贴代码:

    var a = {n:1}
    a.x = a = {n:2}
    alert(a.x) //undefined 

    在弄懂这个之前,我们先普及一个知识点,就是在javascript运算符中,属性运算符的优先级高于赋值运算符的优先级。

    因此,a.x是先于赋值之前就进行的。

    就是说,a.x刚开始是undefined的,这是没错的。

    接下来我们探究一下连等赋值的赋值顺序:

    1、从左往右

    a.x赋值为{n:2};然后a赋值为{n:2};a的重新指向重写了a.x,即.x属性不存在,因此a.x输出为undefined。

    2、从右往左

    a赋值为{n:2};直接限制了a.x的赋值,因为.x在a赋值之前就已经创建了,因此不可能在为a.x赋值。

    上述两种猜想都是大部分人的猜想,我一开始认为是从左往右,最后看了一大波的大神解释,我总结出我自己的结论,如有不对,请指出。

    如果简单的看赋值,或许都争论不出来,但是如果从引用的角度去思考,也许不同。

    我的猜想是这样的,在连等赋值的过程中,若有同一个引用变量进行操作,那么在不同阶段,两者可能会分开为不同指针,或者说是不同变量,因为指向的对象不同。

    因此我觉得是从右往左,过程如下:

     在连等赋值过程中,重写不会发生,因此每个变量指向的对象都不会改变,也就是指针不会改变。

  • 相关阅读:
    doubango(5)--SIP协议栈传输层的启动
    doubango(6)--Doubango协议栈中对RTP的管理
    doubango(4)--SIP协议栈传输层的启动
    doubango(3)--协议栈的启动过程
    【Redis发布订阅】
    【Redis哨兵集群】
    【搭建Saltstack运维工具】
    【Docker构建私有仓库】
    【Docker端口映射】
    【Docker自定制镜像之Dockerfile】
  • 原文地址:https://www.cnblogs.com/Yoriluo/p/6965178.html
Copyright © 2011-2022 走看看