一道定义与赋值的顺序题

js 复制代码
let obj = {
  num1: 117
}
let res = obj;
obj.child = obj = { num2: 935 };
var x = y = res.child.num2;
console.log(obj.child);
console.log(res.num1);
console.log(y);

解析:

    1. let obj = { num1: 117 }

    obj 放在栈里,把 { num1:117} 放在堆里,让 obj 指向堆里的 { num1:117 }

    1. let res = obj;

    res放在栈里,把res也指向堆里的 { num1:117 }

    1. obj.child = obj = { num2: 935 };

重点:赋值操作先定义变量(从左到右),再进行赋值(从右到左)

  • 3.1定义变量: obj.child,给堆里的{ num1:117 }加一个child属性,得{num1:117,child:undefined} - 3.2 定义变量obj,之前在栈里的obj,赋值obj = { num2: 935 },把{ num2: 935 }放在堆里,把栈里的obj指向堆里的{ num2: 935 }
  • 3.3 赋值obj.child = obj,把堆里的 {num1:117,child:undefined} 的child指向 {num2: 935}

从最后一张图可看出此时:

js 复制代码
 obj = { num2: 935 }     

res = { num1: 117,child:{ num2: 935 }  }
相关推荐
lauo16 分钟前
【智体OS】官方上新发布“空钥登陆”--方便访客使用智体操作系统OS和智体应用
前端·javascript·分布式·机器人·开源
哥谭居民000119 分钟前
普通的树形数据primevue的treetable组件的treetable[ ]
前端·javascript·算法
徐小黑ACG24 分钟前
JavaScript 基础
开发语言·javascript
郑大乾6662 小时前
vuex - 第一天
javascript·vue.js·node.js
阿卡基YUAN2 小时前
JavaScript 箭头函数
前端·javascript
湛海不过深蓝2 小时前
【js】记录预览pdf文件
开发语言·javascript·pdf
兮动人2 小时前
vue之axios基本使用
前端·javascript·vue.js
嵌入式小强工作室2 小时前
STM32 Flash DB的使用方法
前端·javascript·stm32
qlj2243 小时前
react-native键盘遮盖底部输入框问题修复
javascript·react native·react.js
GISer_Jing4 小时前
Javascript数据结构常见面试题目(全)
javascript·数据结构·面试