美文网首页
前端进阶|第十二天 连续赋值到底赋给了谁?

前端进阶|第十二天 连续赋值到底赋给了谁?

作者: 皮卡球ca | 来源:发表于2019-10-17 16:19 被阅读0次
var a = {n: 1};
var b = a;
a.x = a = {n: 2};
console.log(a.x);//undefined
console.log(b);

输出结果为
console.log(a.x);//undefined
console.log(b);//Object {n: 1 x: {n: 2}}

看的我有点懵,不是刚给a.x赋值了么,怎么转眼就undefined了呢?

看到网友结构过程是这样的。
1.给a赋值,a作为一个对象指向{n:1}.

var a = {n: 1};

2.b和a共同指向{n:1}

var b = a;

3.关键在第三行的拆解

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

等价于

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

传统编程语言认为a.x的结果就是括号运算的结果,但js却偏不。
首先计算a.x,因为之前我们并没有给a声明成员x,所以a.x运算的结果就是,给a和b执行的{n:1}声明一个成员,即{n:1,x:undefined},因为还没赋值,所以值是 undefined.
接着计算a={n:2},这个操作,会使得a开始指向{n:2},而不再是{n:1,x:undefined}。也就是说a移情别恋了,现在指向{n:1,x:undefined}只剩下了b。
那么最终对{n:1,x:undefined}里面的x赋值,只对b有效。所以最终打印a.x针对的是{n:2}这个对象,当然是undefined。而b里面的x赋值顺利完成为{n:2},即b最终值为{n:1,x:{n:2}}.
js果然自成一派。

相关文章

  • 前端进阶|第十二天 连续赋值到底赋给了谁?

    输出结果为console.log(a.x);//undefinedconsole.log(b);//Object ...

  • js进阶(二)

    第十二天 04-基础进阶-第02天{对象进阶、内置对象} 第十二天对象工厂模式创建对象构造函数模式创建对象原型模式...

  • 连续赋值

    python中是可以使用连续赋值的方式,一次为多个变量进行赋值的,如: 但是有一个问题,比如: 按照正常的顺序赋值...

  • 前端基础进阶系列

    前端基础进阶(一):内存空间详细图解前端基础进阶(二):执行上下文详细图解前端基础进阶(三):变量对象详解前端基础...

  • 学习图谱

    前端整体 基础学习路线 进阶学习路线 整体学习路线 「前端进阶」2018/2019 史上最全的前端学习路线 How...

  • Verilog的各种赋值

    Verilog中的赋值主要有三种,连续赋值、过程赋值以及过程连续赋值。最常见的赋值对象主要是wire型变量和reg...

  • ES6 2.解构赋值

    解构赋值 解构赋值的分类 数组解构赋值 对象解构赋值 字符串解构赋值 布尔值解构赋值 函数参数解构赋值 数值解构赋...

  • 深拷贝与浅拷贝

    一、赋值与赋址 赋值时将某一数值或对象赋给某个变量的过程,有两种情况:1、基本数据类型:赋值,赋值之后两个变量互不...

  • ES6 语法(解构赋值)

    什么是解构赋值及用法 解构赋值分类:数组解构赋值对象解构赋值字符串解构赋值布尔值解构赋值函数参数解构赋值数值解构赋...

  • 还在迷茫于前端如何入门和进阶?万字指南让你不再迷茫!

    我经常会看到很多同学在学习前端的时候比较迷茫,不知道到底应该以怎样的学习路线来入门和进阶前端领域。每次遇到这种问题...

网友评论

      本文标题:前端进阶|第十二天 连续赋值到底赋给了谁?

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