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赋值。

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

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

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

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

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

  • 相关阅读:
    java中a++和++a的区别详解
    Oracle 对比两张表不一样 的数据
    通配符的匹配很全面, 但无法找到元素 'tx:annotation-driven' 的声明
    Java语言基础-运算符
    java中+=详解 a+=b和a=a+b的区别
    java语言基础-变量
    java语言基础-进制
    Spring整合CXF发布及调用WebService
    Oracle Job定时任务的使用详解
    MySQL的主从配置
  • 原文地址:https://www.cnblogs.com/Yoriluo/p/6965178.html
Copyright © 2011-2022 走看看