一道定义与赋值的顺序题

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 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
xiaoqi9223 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233223 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头88215 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas1365 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
2601_949833395 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
军军君016 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three
xiaoqi9227 小时前
React Native鸿蒙跨平台如何实现分类页面组件通过searchQuery状态变量管理搜索输入,实现了分类的实时过滤功能
javascript·react native·react.js·ecmascript·harmonyos
qq_177767378 小时前
React Native鸿蒙跨平台实现应用介绍页,实现了应用信息卡片展示、特色功能网格布局、权限/联系信息陈列、评分展示、模态框详情交互等通用场景
javascript·react native·react.js·ecmascript·交互·harmonyos
2603_949462108 小时前
Flutter for OpenHarmony社团管理App实战:预算管理实现
android·javascript·flutter