一道定义与赋值的顺序题

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 }  }
相关推荐
程序员爱技术1 小时前
Vue 2 + JavaScript + vue-count-to 集成案例
前端·javascript·vue.js
悦涵仙子2 小时前
CSS中的变量应用——:root,Sass变量,JavaScript中使用Sass变量
javascript·css·sass
兔老大的胡萝卜2 小时前
ppk谈JavaScript,悟透JavaScript,精通CSS高级Web,JavaScript DOM编程艺术,高性能JavaScript pdf
前端·javascript
cs_dn_Jie6 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic7 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿7 小时前
webWorker基本用法
前端·javascript·vue.js
清灵xmf8 小时前
TypeScript 类型进阶指南
javascript·typescript·泛型·t·infer
小白学大数据8 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
qq_390161778 小时前
防抖函数--应用场景及示例
前端·javascript
334554328 小时前
element动态表头合并表格
开发语言·javascript·ecmascript