奇葩面试题记录
Posted andy-lehhaxm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奇葩面试题记录相关的知识,希望对你有一定的参考价值。
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..
以上是关于奇葩面试题记录的主要内容,如果未能解决你的问题,请参考以下文章
华为奇葩面试题:一头牛重800公斤一座桥承重700公斤,请问牛怎么过桥?
华为奇葩面试题:一头牛重800公斤一座桥承重700公斤,请问牛怎么过桥?