美文网首页
JS基础 连等赋值

JS基础 连等赋值

作者: 是素净呀丶 | 来源:发表于2019-08-08 11:20 被阅读0次

测试代码如下:

var a = { n: 1 };
var b = a;

a.x = a = { n: 2 };
console.log(a);
console.log(b);
console.log(a.n);

相信绝大多数人第一反应如下:

  1. 开辟内存空间* 存储{ n: 1 } 并将变量a指向该内存空间;
  2. 变量b指向第一步内存空间*;
  3. a = { n: 2 } 开辟新的内存空间**{n: 2} 并将变量a指向该内存空间;
  4. a.x = aa所指向的内存空间**中的{n: 2} 添加新的属性x,并赋值形成{ n: 2, x: { n: 2 } }
    基于如上分析,打印结果为:
    { n: 2, x: { n: 2 } }
    { n: 1 }
    { n: 2 }

然而,世事难料,实际打印打印结果如下
{ n: 2 }
{ n: 1, x: { n: 2 } }
2

正确执行顺序如下:

  1. 开辟内存空间* 存储{ n: 1 } 并将变量a指向该内存空间;
  2. 变量b指向第一步内存空间*;
  3. 解析变量a.x,此时指向内存空间*{ n: 1 },解析变量a,为指针;
  4. 开始赋值,同上分析过程3;
  5. 开始赋值,将内存空间*{ n: 1 } 更改为{ n: 1, x: { n: 2 } };

另,由于b始终指向内存空间* 故过程5的更改将直接作用于它。

相关文章

  • JS基础 连等赋值

    测试代码如下: 相信绝大多数人第一反应如下: 开辟内存空间* 存储{ n: 1 } 并将变量a指向该内存空间; 变...

  • js连等赋值

    赋值等式从左至右进行引用解析,然后从右至左进行赋值操作

  • JS-连等、赋值表达式、链式赋值 chained assignm

    在 ECMAScript(3rd) 文档中有关于赋值表达式的解释: The production Assignme...

  • 连等赋值的坑

    https://segmentfault.com/q/1010000002637728

  • JavaScript连等赋值问题

    今天逛群发现有同学问了这么一个问题image.png 其实这道题目的难点并不在引用类型相关知识点,而是在运算符优先...

  • JAVA 连等赋值问题

    阅读目录 一、描述 二、分析 三、总结 一、描述 关于 Java 连等赋值,例如a=b=c;我们知道它是从右往左依...

  • javascript 连等赋值问题(一)

    请看下面代码 刚看到输出结果的时候,确实很懵逼,研究了半天,才弄懂了!!! 关键在于,其实 相当于: 那么,从头分...

  • xdh精英班Day5

    第五天学习笔记 Node.js 是运行js的编译环境 js 基础语法 变量声明,赋值语句:var。语法如下: va...

  • 手写实现深度拷贝

    手写实现深度拷贝 本文参考:面试题之如何实现一个深拷贝 基础理论 拷贝的基础是赋值,在 js 中,将一个变量赋值给...

  • js运算符

    js基础语法:运算符,判断语句,数据类型,js对象 一、运算符 赋值运算符 =算数运算符 +-*/% ++...

网友评论

      本文标题:JS基础 连等赋值

      本文链接:https://www.haomeiwen.com/subject/jvitjctx.html