资讯专栏INFORMATION COLUMN

(详解)多赋值表达式执行过程

anyway / 456人阅读

摘要:在讲之前,先出一道经典面试题答案是如果对这个答案的得来明白的清清楚楚的就不用再往下看了。

在讲之前,先出一道经典面试题:

 var a = {n:1};   
 a.x = a = {n:2};  
 console.log(a.x);

答案是 : undefined
如果对这个答案的得来明白的清清楚楚的就不用再往下看了。

首先要了解运算符的优先级别(MDN地址)

可知,在当前表达式中

a.x = a = {n:2};

最优先的为".",成员访问运算符
那么上述的代码可以理解为

 var a = {n:1}; 
 var temp = a.x; 
 temp = a = {n:2};  
 console.log(a.x);

接下来是多个赋值运算符的运算,

                             摘自JavaScript权威指南_第六版 82页

那么

 var a = {n:1}; 
 var temp = a.x; 
 (temp = (a = {n:2}));  
 console.log(a.x);

到这里,大家都明白了吧
a.x的地址获取在 a变化之前
所以导致了,当我们再去访问a.x的时候,其实访问的a已经不是之前的那个a了,自然a.x为undefined

这样更直观一点

 var a = {n:1};
 var b = a;  
 a.x = a = {n:2};  
 console.log(a.x);
 var a = {n:1};
 var b = a;         // 使用b作为a的追踪
 var temp = a.x;    // 这个 相当于 var temp = b.x;
 temp = a = {n:2};  
 console.log(a.x);
 console.log(b.x);  // 这里就是 console.log(temp); => {n:2}

End...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95643.html

相关文章

  • 软件接口测试工具Jmeter使用核心详解【建议收藏】

    用Jmeter做接口测试只需要掌握几个核心功能就可以了。 并不一定要把它所有的功能都掌握,先掌握核心功能入行,然后再根据工作需要和职业规划来学习更多的内容。这篇文章在前面接口测试框架(测试计划--->线程组--->请求--->查看结果树)的前提下,来介绍必须要掌握的几个核心功能,力求用最短的时间取得最大的成果。 在前面的文章中我提到,用Jmeter做接口测试的核心是单接口测试的参数化和关联接口测试...

    zoomdong 评论0 收藏0
  • javascript技术难点(三)之this、new、apply和call详解

    摘要:第四点也要着重讲下,记住构造函数被操作,要让正常作用最好不能在构造函数里 4) this、new、call和apply的相关问题 讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一个思路从应用的角度来讲解this指针,从这个角度理解this指针更加有现实意义。 下面我们看看在ja...

    ghnor 评论0 收藏0
  • 深入理解 js 声明提升( 尾部有总结 和 面试题解析 )

    摘要:要理解函数的提升行为,让我们先解析什么是的提升。也就是说声明提升了,赋值还留着原地,等待执行。声明被提升,而包括函数表达式的赋值在内的赋值操作并不会提升,而是留在原地等待执行。 javaScript自上而下执行的顺序受到很多新手和部分老手的共识,但是这其实并不完全正确,这涉及到js的编译过程,这方面我们稍后会聊到,先考虑下面代码: window.onload = function(){...

    curlyCheng 评论0 收藏0
  • ES6 变量作用域与提升:变量的生命周期详解

    摘要:不同的是函数体并不会再被提升至函数作用域头部,而仅会被提升到块级作用域头部避免全局变量在计算机编程中,全局变量指的是在所有作用域中都能访问的变量。 ES6 变量作用域与提升:变量的生命周期详解从属于笔者的现代 JavaScript 开发:语法基础与实践技巧系列文章。本文详细讨论了 JavaScript 中作用域、执行上下文、不同作用域下变量提升与函数提升的表现、顶层对象以及如何避免创建...

    lmxdawn 评论0 收藏0
  • 性能优化详解

    摘要:几个月前面试的时候问我性能优化我可能会开始背诵雅虎军规,加点,代码层面稍稍讲点,现在系统的梳理下性能优化的方方面面本文涉及方面有代码优化网络请求过程角度入手解析建立链接网络往返时延数据传输网络问题角度入手请求数量流量性能优化测试工具代码优化 几个月前面试的时候问我性能优化我可能会开始背诵雅虎军规,加点webp,代码层面稍稍讲点,现在系统的梳理下性能优化的方方面面 本文涉及方面有: 代...

    piapia 评论0 收藏0

发表评论

0条评论

anyway

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<