一道定义与赋值的顺序题

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 }  }
相关推荐
We་ct4 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
cn_mengbei12 小时前
用React Native开发OpenHarmony应用:Reanimated共享元素过渡
javascript·react native·react.js
kyriewen12 小时前
前端测试:别为了100%覆盖率而写测试,那是自欺欺人
前端·javascript·单元测试
Data_Journal13 小时前
如何使用cURL更改User Agent
大数据·服务器·前端·javascript·数据库
掌心向暖RPA自动化13 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
竹林81813 小时前
wagmi v2 多链钱包切换:一个 Uniswap 仿盘项目让我踩了三天坑
前端·javascript
你也向往长安城吗13 小时前
最快的 JavaScript navmesh pathfinding3d 算法。
javascript
滕青山13 小时前
在线PDF拆分工具核心JS实现
前端·javascript·vue.js
兔子零102415 小时前
Ofox AI值得用吗?
前端·javascript·后端
We་ct16 小时前
React 性能优化精讲
前端·javascript·react.js·性能优化·前端框架·html·浏览器