请问以下JS代码输出的结果是什么?
请问以下JS代码输出的结果是什么?
undefined、117、935
在对obj赋值的那一行语句可以看到应该拆分成两个表达式,前者的含义是计算obj.child,并暂存了当前的obj,之后才被赋值。
而后者是改变了obj的指向覆盖了原本的变量obj,它的值是{num2:935},所以找不到child这个属性,故为undefined。
这里的res代表的就是原本的变量obj,因此可以访问到num1和child。
至于y在这里是会被认为是全局变量
重点:赋值操作先定义变量(从左到右),再进行赋值(从右到左)
考察连等赋值。
obj.child = obj = { num2: 935 };
JS引擎在执行赋值语句时,会先从左往右解析各个变量名,转换成变量值,然后从右往左执行赋值。
所以这里首先两个obj都为{ num1: 117 }。
接着从右往左:
obj = { num2: 935 };//第二个等号赋值
{ num1: 117 }.child = { num2: 935 };//第一个等号赋值
值得注意的是第二个才为真正的obj只有num2。
而第一个obj已经被替换为{ num1: 117 }对象,这个对象中有个child属性,而res又引用了这个对象所以res改变为{ num1:117, child: { num2: 935 } }。
而对var x = y = 935; 同理从右往左执行。可以理解为var x = ( y = 935 );或者y = 935; var x = y;
__EOF__

本文链接:https://www.cnblogs.com/longmo666/p/17824284.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律