码迷,mamicode.com
首页 > 其他好文 > 详细

奇葩面试题记录

时间:2019-04-21 09:34:31      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:define   丢失   变量   为什么   优先   OLE   nbsp   就是   核心   

1.    var  a = {n:100};

  var b=a;         为什么要有这步, 因为后面对a的赋值操作会丢失a对{ n:100 } 的引用

       a.x = a = { n:200 };   这是核心考点

  console.log( a.x );    

  console.log( b.x );

  解析: 

  1). js的赋值运算顺序永远都是从右往左的,但是 a.x = a = { n:200 }中,  由于"."是优先级高于"="赋值运算符,所以这行代码先执行了a.x, 即 为变量a引用的{n:100}对象中添加x属性, 并初始化为undefined, 此时初始化完成, 就等待赋值了  此时 a 引用的对象变成了  { n:100, x: undefined }。

  2). 这时才开始赋值操作, a = { n:200 } 再 a.x = { n:200 },  这时不会因为a.x 中的a的引用变了, a.x再去重新初始化, 而是接着赋值给原先的a.x,即 { n:100, x:{ n:200 }}

       总结:  最重要考点:  就是连等赋值   和   变量.属性优先级,   还有  代码在运行前已经编译完毕,  后续会按先前编译的初始化环境赋值

2.. 

奇葩面试题记录

标签:define   丢失   变量   为什么   优先   OLE   nbsp   就是   核心   

原文地址:https://www.cnblogs.com/andy-lehhaxm/p/10743605.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!