一道定义与赋值的顺序题

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 }  }
相关推荐
郑州光合科技余经理33 分钟前
实战:攻克海外版同城生活服务平台开发五大挑战
java·开发语言·javascript·数据库·git·php·生活
Yanni4Night42 分钟前
JavaScript打包器大奖赛:谁是构建速度之王? 🚀
前端·javascript
SakuraOnTheWay1 小时前
解构 JavaScript 迭代器:一行代码引发的性能思考
javascript·性能优化
默海笑1 小时前
VUE后台管理系统:项目架构之搭建Layout架构解决方案与实现
前端·javascript·vue.js
csdn_aspnet1 小时前
C# 电子签名及文档存储
javascript·c#
1024肥宅1 小时前
现代 JavaScript 特性:ES6+ 新特性深度解析与实践
前端·javascript·面试
BD_Marathon2 小时前
Vue3_工程文件之间的关系
前端·javascript·vue.js
weibkreuz2 小时前
模块与组件、模块化与组件化的理解@3
开发语言·前端·javascript
拾忆,想起2 小时前
单例模式深度解析:如何确保一个类只有一个实例
前端·javascript·python·微服务·单例模式·性能优化·dubbo
chilavert3182 小时前
技术演进中的开发沉思-261 Ajax:动画优化
前端·javascript·ajax