一道定义与赋值的顺序题

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 }  }
相关推荐
烛阴2 小时前
从0到1掌握盒子模型:精准控制网页布局的秘诀
前端·javascript·css
Danny_FD6 小时前
React中可有可无的优化-对象类型的使用
前端·javascript
LeeAt6 小时前
从Promise到async/await的逻辑演进
前端·javascript
前端Hardy6 小时前
HTML&CSS:3D 轮播图全攻略
前端·javascript
前端Hardy6 小时前
7 个技巧助你写出优雅高效的 JavaScript 异步代码
前端·javascript·面试
走向终结的前端7 小时前
vue中再搞一下SSE的使用
前端·javascript
等一个晴天丶7 小时前
JS实现数组去重(重复的元素只保留一个)
javascript
用户405594802507 小时前
从防抖函数中得到的简单几点记录
javascript
独立开阀者_FwtCoder7 小时前
Nginx 部署负载均衡服务全解析
前端·javascript·后端
葬送的代码人生8 小时前
AI Coding→像素飞机大冒险:一个让你又爱又恨的小游戏
javascript·设计模式·ai编程