有趣的面试题
文章目录
1 | var a = {n:1}; |
关键点在于‘.‘符号的运算优先于=,所以Lemures这位大神说的解析器在接受到 a.x = a = {n:2}
这样的语句后:找到 a
和 a.x
的指针。如果已有指针,那么不改变它。如果没有指针,即那个变量还没被申明,那么就创建它,指向 null
。所以会优先创建a.x
,然后把他们的指针都指向{n:2}
.
现在的关系就变成了b虽然是指向a,但是本质的说b应该是指向原本a
的内存块-first,然后由于’.’
的优先性,在a被赋值给另外一个内存块-second{n:2}
之前,已经优先创建了a.x
,所以a.x
是存在于原本的内存块-first中的,b的值所以是b => {n: 1, x: {n: 2 } }
;然后现在a已经被重新指向内存块-second,所以a
不再拥有a.x
这个属性a => {n: 2}